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;
}
}
}