src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceVisitor.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 29,38 **** --- 29,39 ---- import com.sun.tools.internal.ws.resources.WebserviceapMessages; import com.sun.tools.internal.ws.util.ClassNameInfo; import com.sun.tools.internal.ws.wsdl.document.soap.SOAPStyle; import com.sun.xml.internal.ws.model.RuntimeModeler; + import javax.annotation.processing.ProcessingEnvironment; import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService;
*** 51,60 **** --- 52,62 ---- import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.lang.model.util.ElementFilter; import javax.lang.model.util.SimpleElementVisitor6; import javax.lang.model.util.SimpleTypeVisitor6; + import javax.lang.model.util.Types; import java.lang.annotation.Annotation; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set;
*** 137,147 **** --- 139,152 ---- preProcessWebService(webService, e); processWebService(webService, e); serviceImplName = null; postProcessWebService(webService, e); serviceImplName = null; + break; } + default: + break; } return null; } protected void verifySeiAnnotations(WebService webService, TypeElement d) {
*** 279,288 **** --- 284,295 ---- wrapped = true; } else { soapStyle = SOAPStyle.DOCUMENT; wrapped = soapBinding.parameterStyle().equals(ParameterStyle.WRAPPED); } + } else { + pushedSoapBinding = false; } return soapBinding; } protected String getNamespace(PackageElement packageElement) {
*** 364,373 **** --- 371,381 ---- for (ExecutableElement method : ElementFilter.methodsIn(element.getEnclosedElements())) { method.accept(this, null); } for (TypeMirror superType : element.getInterfaces()) processMethods((TypeElement) ((DeclaredType) superType).asElement()); + break; } case CLASS: { builder.log("ProcessedMethods Class: " + element); hasWebMethods = hasWebMethods(element); if (element.getQualifiedName().toString().equals(Object.class.getName()))
*** 380,390 **** --- 388,401 ---- } TypeMirror superclass = element.getSuperclass(); if (!superclass.getKind().equals(TypeKind.NONE)) { processMethods((TypeElement) ((DeclaredType) superclass).asElement()); } + break; } + default: + break; } } private TypeElement getEndpointInterfaceElement(String endpointInterfaceName, TypeElement element) { TypeElement intTypeElement = null;
*** 502,512 **** return false; } boolean hasDefaultConstructor = false; for (ExecutableElement constructor : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { if (constructor.getModifiers().contains(Modifier.PUBLIC) && ! constructor.getParameters().size() == 0) { hasDefaultConstructor = true; break; } } if (!hasDefaultConstructor && !isStateful) { --- 513,523 ---- return false; } boolean hasDefaultConstructor = false; for (ExecutableElement constructor : ElementFilter.constructorsIn(classElement.getEnclosedElements())) { if (constructor.getModifiers().contains(Modifier.PUBLIC) && ! constructor.getParameters().isEmpty()) { hasDefaultConstructor = true; break; } } if (!hasDefaultConstructor && !isStateful) {
*** 545,555 **** protected boolean classImplementsSei(TypeElement classElement, TypeElement interfaceElement) { for (TypeMirror interfaceType : classElement.getInterfaces()) { if (((DeclaredType) interfaceType).asElement().equals(interfaceElement)) return true; } ! List<ExecutableElement> classMethods = ElementFilter.methodsIn(classElement.getEnclosedElements()); boolean implementsMethod; for (ExecutableElement interfaceMethod : ElementFilter.methodsIn(interfaceElement.getEnclosedElements())) { implementsMethod = false; for (ExecutableElement classMethod : classMethods) { if (sameMethod(interfaceMethod, classMethod)) { --- 556,566 ---- 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)) {
*** 564,584 **** } } return true; } protected boolean sameMethod(ExecutableElement method1, ExecutableElement method2) { if (!method1.getSimpleName().equals(method2.getSimpleName())) return false; ! if (!method1.getReturnType().equals(method2.getReturnType())) return false; List<? extends VariableElement> parameters1 = method1.getParameters(); List<? extends VariableElement> parameters2 = method2.getParameters(); if (parameters1.size() != parameters2.size()) return false; for (int i = 0; i < parameters1.size(); i++) { ! if (!builder.getProcessingEnvironment().getTypeUtils().isSameType(parameters1.get(i).asType(), parameters2.get(i).asType())) return false; } return true; } --- 575,610 ---- } } return true; } + 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; + } + protected boolean sameMethod(ExecutableElement method1, ExecutableElement method2) { if (!method1.getSimpleName().equals(method2.getSimpleName())) return false; ! Types typeUtils = builder.getProcessingEnvironment().getTypeUtils(); ! if(!typeUtils.isSameType(method1.getReturnType(), method2.getReturnType()) ! && !typeUtils.isSubtype(method2.getReturnType(), method1.getReturnType())) return false; List<? extends VariableElement> parameters1 = method1.getParameters(); List<? extends VariableElement> parameters2 = method2.getParameters(); if (parameters1.size() != parameters2.size()) return false; for (int i = 0; i < parameters1.size(); i++) { ! if (!typeUtils.isSameType(parameters1.get(i).asType(), parameters2.get(i).asType())) return false; } return true; }
*** 614,626 **** if (!isLegalMethod(method, element)) return false; } DeclaredType superClass = (DeclaredType) element.getSuperclass(); ! TypeElement typeElement = (TypeElement) superClass.asElement(); ! return typeElement.getQualifiedName().toString().equals(Object.class.getName()) ! || methodsAreLegal(typeElement); } default: { throw new IllegalArgumentException("Class or interface was expecting. But element: " + element); } } --- 640,652 ---- if (!isLegalMethod(method, element)) return false; } DeclaredType superClass = (DeclaredType) element.getSuperclass(); ! TypeElement tE = (TypeElement) superClass.asElement(); ! return tE.getQualifiedName().toString().equals(Object.class.getName()) ! || methodsAreLegal(tE); } default: { throw new IllegalArgumentException("Class or interface was expecting. But element: " + element); } }
*** 798,813 **** } protected boolean isLegalType(TypeMirror type) { if (!(type != null && type.getKind().equals(TypeKind.DECLARED))) return true; ! TypeElement typeElement = (TypeElement) ((DeclaredType) type).asElement(); ! if (typeElement == null) { // can be null, if this type's declaration is unknown. This may be the result of a processing error, such as a missing class file. builder.processError(WebserviceapMessages.WEBSERVICEAP_COULD_NOT_FIND_TYPEDECL(type.toString(), context.getRound())); } ! return !builder.isRemote(typeElement); } protected VariableElement getOutParameter(ExecutableElement method) { WebParam webParam; for (VariableElement param : method.getParameters()) { --- 824,839 ---- } protected boolean isLegalType(TypeMirror type) { if (!(type != null && type.getKind().equals(TypeKind.DECLARED))) return true; ! TypeElement tE = (TypeElement) ((DeclaredType) type).asElement(); ! if (tE == null) { // can be null, if this type's declaration is unknown. This may be the result of a processing error, such as a missing class file. builder.processError(WebserviceapMessages.WEBSERVICEAP_COULD_NOT_FIND_TYPEDECL(type.toString(), context.getRound())); } ! return !builder.isRemote(tE); } protected VariableElement getOutParameter(ExecutableElement method) { WebParam webParam; for (VariableElement param : method.getParameters()) {
*** 819,840 **** --- 845,870 ---- return null; } protected static class MySoapBinding implements SOAPBinding { + @Override public Style style() { return SOAPBinding.Style.DOCUMENT; } + @Override public Use use() { return SOAPBinding.Use.LITERAL; } + @Override public ParameterStyle parameterStyle() { return SOAPBinding.ParameterStyle.WRAPPED; } + @Override public Class<? extends java.lang.annotation.Annotation> annotationType() { return SOAPBinding.class; } } }