package gw.internal.xml.ws.server; import gw.lang.parser.IExpression; import gw.lang.parser.IParsedElement; import gw.lang.parser.IUsageSiteValidator; import gw.lang.parser.expressions.IBeanMethodCallExpression; import gw.lang.parser.expressions.ITypeLiteralExpression; import gw.lang.parser.resources.Res; import gw.lang.reflect.IType; import gw.lang.reflect.TypeSystem; /** * Created by IntelliJ IDEA. * User: dandrews * Date: 11/4/13 * Time: 2:17 PM * To change this template use File | Settings | File Templates. */ // method call validator - validates call sites for publish(IType) to ensure only types annotated with // @WsiWebService are published, for user convenience public class ServerAnnotationVerifier implements IUsageSiteValidator { public void validate( IParsedElement pe ) { if ( pe instanceof IBeanMethodCallExpression) { // should always be true IBeanMethodCallExpression expr = (IBeanMethodCallExpression) pe; if ( expr.getArgs() != null ) { IExpression arg = expr.getArgs()[0]; if ( arg instanceof ITypeLiteralExpression) { ITypeLiteralExpression typeLiteral = (ITypeLiteralExpression) arg; IType type = typeLiteral.getType().getType(); if ( ! type.getTypeInfo().hasAnnotation( TypeSystem.getByFullName("gw.xml.ws.annotation.WsiWebService") ) ) { expr.addParseException( Res.MSG_ANY, "Type argument must have @WsiWebService annotation" ); } } } } } }