protected void verifyImplAnnotations(TypeElement d) { for (ExecutableElement method : ElementFilter.methodsIn(d.getEnclosedElements())) { checkForInvalidImplAnnotation(method, WebMethod.class); checkForInvalidImplAnnotation(method, Oneway.class); checkForInvalidImplAnnotation(method, WebResult.class); for (VariableElement param : method.getParameters()) { checkForInvalidImplAnnotation(param, WebParam.class); } } }
private static List<ExecutableElement> getClassMethods(TypeElement classElement) { if (classElement.getQualifiedName().toString().equals(Object.class.getName())) // we don't need Object's methods return null; TypeElement superclassElement = (TypeElement) ((DeclaredType) classElement.getSuperclass()).asElement(); List<ExecutableElement> superclassesMethods = getClassMethods(superclassElement); List<ExecutableElement> classMethods = ElementFilter.methodsIn(classElement.getEnclosedElements()); if (superclassesMethods == null) return classMethods; else superclassesMethods.addAll(classMethods); return superclassesMethods; }
private void inspectEndpointInterface(String endpointInterfaceName, TypeElement d) { TypeElement intTypeElement = getEndpointInterfaceElement(endpointInterfaceName, d); if (intTypeElement != null) intTypeElement.accept(this, null); }
hasWebMethods = false; for (ExecutableElement method : ElementFilter.methodsIn(element.getEnclosedElements())) { if (!isLegalMethod(method, element)) return false; if (!methodsAreLegal((TypeElement) ((DeclaredType) superInterface).asElement())) return false; hasWebMethods = hasWebMethods(element); for (ExecutableElement method : ElementFilter.methodsIn(element.getEnclosedElements())) { if (!method.getModifiers().contains(Modifier.PUBLIC)) continue; // let's validate only public methods if (!isLegalMethod(method, element)) return false; || methodsAreLegal(tE);
@Override public Void visitType(TypeElement e, Object o) { WebService webService = e.getAnnotation(WebService.class); if (!shouldProcessWebService(webService, e)) return null; if (builder.checkAndSetProcessed(e)) verifySeiAnnotations(webService, e); endpointInterfaceName = e.getQualifiedName(); processingSei = true; preProcessWebService(webService, e); processWebService(webService, e); postProcessWebService(webService, e); break; String endpointInterfaceName = webService != null ? webService.endpointInterface() : null; if (endpointInterfaceName != null && endpointInterfaceName.length() > 0) { checkForInvalidImplAnnotation(e, SOAPBinding.class); if (webService.name().length() > 0) builder.processError(WebserviceapMessages.WEBSERVICEAP_ENDPOINTINTEFACE_PLUS_ELEMENT("name"), e); endpointReferencesInterface = true; verifyImplAnnotations(e); inspectEndpointInterface(endpointInterfaceName, e); serviceImplName = null; return null; preProcessWebService(webService, e); processWebService(webService, e); serviceImplName = null; postProcessWebService(webService, e);
if (!isLegalType(returnType)) { builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_RETURN_TYPE_CANNOT_IMPLEMENT_REMOTE(typeElement.getQualifiedName(), method.getSimpleName(), if (isOneWay && !isValidOneWayMethod(method, typeElement)) return false; if (!isLegalParameter(parameter, method, typeElement, paramIndex++)) return false; if (!isDocLitWrapped() && soapStyle.equals(SOAPStyle.DOCUMENT)) { VariableElement outParam = getOutParameter(method); int inParams = getModeParameterCount(method, WebParam.Mode.IN); int outParams = getModeParameterCount(method, WebParam.Mode.OUT); if (inParams != 1) { builder.processError(WebserviceapMessages.WEBSERVICEAP_DOC_BARE_AND_NO_ONE_IN(typeElement.getQualifiedName(), method.toString()), method);
protected boolean isLegalImplementation(WebService webService, TypeElement classElement) { boolean isStateful = isStateful(classElement); if (!methodsAreLegal(classElement)) return false; } else { TypeElement interfaceElement = getEndpointInterfaceElement(webService.endpointInterface(), classElement); if (!classImplementsSei(classElement, interfaceElement)) return false;
protected boolean isValidOneWayMethod(ExecutableElement method, TypeElement typeElement) { boolean valid = true; if (!(method.getReturnType().accept(NO_TYPE_VISITOR, null))) { // this is an error, cannot be OneWay and have a return type builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_OPERATION_CANNOT_HAVE_RETURN_TYPE(typeElement.getQualifiedName(), method.toString()), method); valid = false; } VariableElement outParam = getOutParameter(method); if (outParam != null) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_AND_OUT(typeElement.getQualifiedName(), method.toString()), outParam); valid = false; } if (!isDocLitWrapped() && soapStyle.equals(SOAPStyle.DOCUMENT)) { int inCnt = getModeParameterCount(method, WebParam.Mode.IN); if (inCnt != 1) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_AND_NOT_ONE_IN(typeElement.getQualifiedName(), method.toString()), method); valid = false; } } for (TypeMirror thrownType : method.getThrownTypes()) { TypeElement thrownElement = (TypeElement) ((DeclaredType) thrownType).asElement(); if (builder.isServiceException(thrownType)) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_OPERATION_CANNOT_DECLARE_EXCEPTIONS( typeElement.getQualifiedName(), method.toString(), thrownElement.getQualifiedName()), method); valid = false; } } return valid; }
return false; return isLegalSei(element); hasWebMethods = hasWebMethods(element); SOAPBinding soapBinding = element.getAnnotation(SOAPBinding.class); if (soapBinding != null return false; return isLegalImplementation(webService, element);
protected boolean classImplementsSei(TypeElement classElement, TypeElement interfaceElement) { for (TypeMirror interfaceType : classElement.getInterfaces()) { if (((DeclaredType) interfaceType).asElement().equals(interfaceElement)) return true; } List<ExecutableElement> classMethods = getClassMethods(classElement); boolean implementsMethod; for (ExecutableElement interfaceMethod : ElementFilter.methodsIn(interfaceElement.getEnclosedElements())) { implementsMethod = false; for (ExecutableElement classMethod : classMethods) { if (sameMethod(interfaceMethod, classMethod)) { implementsMethod = true; classMethods.remove(classMethod); break; } } if (!implementsMethod) { builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_NOT_IMPLEMENTED(interfaceElement.getSimpleName(), classElement.getSimpleName(), interfaceMethod), interfaceMethod); return false; } } return true; }
processMethods((TypeElement) ((DeclaredType) superType).asElement()); break; hasWebMethods = hasWebMethods(element); if (element.getQualifiedName().toString().equals(Object.class.getName())) return; processMethods((TypeElement) ((DeclaredType) superclass).asElement());
protected int getModeParameterCount(ExecutableElement method, WebParam.Mode mode) { WebParam webParam; int cnt = 0; for (VariableElement param : method.getParameters()) { webParam = param.getAnnotation(WebParam.class); if (webParam != null) { if (webParam.header()) continue; if (isEquivalentModes(mode, webParam.mode())) cnt++; } else { if (isEquivalentModes(mode, WebParam.Mode.IN)) { cnt++; } } } return cnt; }
@Override public Void visitType(TypeElement e, Object o) { WebService webService = e.getAnnotation(WebService.class); if (!shouldProcessWebService(webService, e)) return null; if (builder.checkAndSetProcessed(e)) verifySeiAnnotations(webService, e); endpointInterfaceName = e.getQualifiedName(); processingSei = true; preProcessWebService(webService, e); processWebService(webService, e); postProcessWebService(webService, e); break; String endpointInterfaceName = webService != null ? webService.endpointInterface() : null; if (endpointInterfaceName != null && endpointInterfaceName.length() > 0) { checkForInvalidImplAnnotation(e, SOAPBinding.class); if (webService.name().length() > 0) builder.processError(WebserviceapMessages.WEBSERVICEAP_ENDPOINTINTEFACE_PLUS_ELEMENT("name"), e); endpointReferencesInterface = true; verifyImplAnnotations(e); inspectEndpointInterface(endpointInterfaceName, e); serviceImplName = null; return null; preProcessWebService(webService, e); processWebService(webService, e); serviceImplName = null; postProcessWebService(webService, e);
if (!isLegalType(returnType)) { builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_RETURN_TYPE_CANNOT_IMPLEMENT_REMOTE(typeElement.getQualifiedName(), method.getSimpleName(), if (isOneWay && !isValidOneWayMethod(method, typeElement)) return false; if (!isLegalParameter(parameter, method, typeElement, paramIndex++)) return false; if (!isDocLitWrapped() && soapStyle.equals(SOAPStyle.DOCUMENT)) { VariableElement outParam = getOutParameter(method); int inParams = getModeParameterCount(method, WebParam.Mode.IN); int outParams = getModeParameterCount(method, WebParam.Mode.OUT); if (inParams != 1) { builder.processError(WebserviceapMessages.WEBSERVICEAP_DOC_BARE_AND_NO_ONE_IN(typeElement.getQualifiedName(), method.toString()), method);
protected boolean isLegalImplementation(WebService webService, TypeElement classElement) { boolean isStateful = isStateful(classElement); if (!methodsAreLegal(classElement)) return false; } else { TypeElement interfaceElement = getEndpointInterfaceElement(webService.endpointInterface(), classElement); if (!classImplementsSei(classElement, interfaceElement)) return false;
protected boolean isValidOneWayMethod(ExecutableElement method, TypeElement typeElement) { boolean valid = true; if (!(method.getReturnType().accept(NO_TYPE_VISITOR, null))) { // this is an error, cannot be OneWay and have a return type builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_OPERATION_CANNOT_HAVE_RETURN_TYPE(typeElement.getQualifiedName(), method.toString()), method); valid = false; } VariableElement outParam = getOutParameter(method); if (outParam != null) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_AND_OUT(typeElement.getQualifiedName(), method.toString()), outParam); valid = false; } if (!isDocLitWrapped() && soapStyle.equals(SOAPStyle.DOCUMENT)) { int inCnt = getModeParameterCount(method, WebParam.Mode.IN); if (inCnt != 1) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_AND_NOT_ONE_IN(typeElement.getQualifiedName(), method.toString()), method); valid = false; } } for (TypeMirror thrownType : method.getThrownTypes()) { TypeElement thrownElement = (TypeElement) ((DeclaredType) thrownType).asElement(); if (builder.isServiceException(thrownType)) { builder.processError(WebserviceapMessages.WEBSERVICEAP_ONEWAY_OPERATION_CANNOT_DECLARE_EXCEPTIONS( typeElement.getQualifiedName(), method.toString(), thrownElement.getQualifiedName()), method); valid = false; } } return valid; }
hasWebMethods = false; for (ExecutableElement method : ElementFilter.methodsIn(element.getEnclosedElements())) { if (!isLegalMethod(method, element)) return false; if (!methodsAreLegal((TypeElement) ((DeclaredType) superInterface).asElement())) return false; hasWebMethods = hasWebMethods(element); for (ExecutableElement method : ElementFilter.methodsIn(element.getEnclosedElements())) { if (!method.getModifiers().contains(Modifier.PUBLIC)) continue; // let's validate only public methods if (!isLegalMethod(method, element)) return false; || methodsAreLegal(tE);
return false; return isLegalSei(element); hasWebMethods = hasWebMethods(element); SOAPBinding soapBinding = element.getAnnotation(SOAPBinding.class); if (soapBinding != null return false; return isLegalImplementation(webService, element);
protected boolean classImplementsSei(TypeElement classElement, TypeElement interfaceElement) { for (TypeMirror interfaceType : classElement.getInterfaces()) { if (((DeclaredType) interfaceType).asElement().equals(interfaceElement)) return true; } List<ExecutableElement> classMethods = getClassMethods(classElement); boolean implementsMethod; for (ExecutableElement interfaceMethod : ElementFilter.methodsIn(interfaceElement.getEnclosedElements())) { implementsMethod = false; for (ExecutableElement classMethod : classMethods) { if (sameMethod(interfaceMethod, classMethod)) { implementsMethod = true; classMethods.remove(classMethod); break; } } if (!implementsMethod) { builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_NOT_IMPLEMENTED(interfaceElement.getSimpleName(), classElement.getSimpleName(), interfaceMethod), interfaceMethod); return false; } } return true; }
processMethods((TypeElement) ((DeclaredType) superType).asElement()); break; hasWebMethods = hasWebMethods(element); if (element.getQualifiedName().toString().equals(Object.class.getName())) return; processMethods((TypeElement) ((DeclaredType) superclass).asElement());