[404460] Annotation validator in jaxws.core should not be flagging
errors on the generated async methods in the SEI generated by
wsimport/wsdl2java
[405206] @FeatureConstructor couldn't be shown in Annotation Properties
view
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
index 0017d36..e0f0b75 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.annotations.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jst.ws.annotations.core;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.1.qualifier
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-Vendor: %pluginProvider
diff --git a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
index db2d3cc..00f491b 100644
--- a/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
+++ b/bundles/org.eclipse.jst.ws.annotations.core/src/org/eclipse/jst/ws/annotations/core/AnnotationsManager.java
@@ -384,7 +384,12 @@
}
if (javaElement instanceof IMethod) {
- return getAnnotationsForElementType(javaElement, ElementType.METHOD);
+ IMethod method = (IMethod) javaElement;
+ if (method.isConstructor()) {
+ return getAnnotationsForElementType(javaElement, ElementType.CONSTRUCTOR);
+ } else {
+ return getAnnotationsForElementType(javaElement, ElementType.METHOD);
+ }
}
if (javaElement instanceof ILocalVariable) {
diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
index 2eb7279..2464956 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jst.ws.jaxws.core;singleton:=true
Bundle-Vendor: %pluginProvider
-Bundle-Version: 1.0.201.qualifier
+Bundle-Version: 1.0.202.qualifier
Bundle-ClassPath: .
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
index aab3e67..300073e 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
@@ -28,6 +28,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -47,6 +48,7 @@
import javax.xml.ws.WebFault;
import org.apache.xerces.util.XMLChar;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jst.ws.annotations.core.processor.AbstractAnnotationProcessor;
import org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils;
import org.eclipse.jst.ws.internal.jaxws.core.JAXWSCoreMessages;
@@ -58,6 +60,7 @@
import com.sun.mirror.declaration.AnnotationValue;
import com.sun.mirror.declaration.ClassDeclaration;
import com.sun.mirror.declaration.Declaration;
+import com.sun.mirror.declaration.InterfaceDeclaration;
import com.sun.mirror.declaration.MethodDeclaration;
import com.sun.mirror.declaration.ParameterDeclaration;
import com.sun.mirror.declaration.TypeDeclaration;
@@ -125,11 +128,24 @@
}
}
+ private boolean isAsyncMethod(MethodDeclaration methodDeclaration) {
+ if (methodDeclaration.getReturnType() instanceof InterfaceDeclaration) {
+ InterfaceDeclaration id = (InterfaceDeclaration) methodDeclaration.getReturnType();
+ String qn = Signature.getTypeErasure(id.getQualifiedName());
+ if (qn.equals("javax.xml.ws.Response") || qn.equals("java.util.concurrent.Future")) { //$NON-NLS-1$ //$NON-NLS-2$
+ return true;
+ }
+ }
+ return false;
+ }
+
private void checkOperationNames(Collection<? extends MethodDeclaration> methods) {
Map<Declaration, QName> nameMap = new HashMap<Declaration, QName>();
for (MethodDeclaration methodDeclaration : methods) {
- nameMap.put(methodDeclaration, new QName(getTargetNamespace(methodDeclaration.getDeclaringType()),
- getOperationName(methodDeclaration)));
+ if (!isAsyncMethod(methodDeclaration)) {
+ nameMap.put(methodDeclaration, new QName(getTargetNamespace(methodDeclaration.getDeclaringType()),
+ getOperationName(methodDeclaration)));
+ }
}
Declaration[] keys = nameMap.keySet().toArray(new Declaration[nameMap.size()]);
@@ -168,6 +184,14 @@
methods.addAll(environment.getDeclarationsAnnotatedWith(requestWrapperDeclaration));
methods.addAll(environment.getDeclarationsAnnotatedWith(resposeWrapperDeclaration));
+ Iterator<Declaration> methodsIter = methods.iterator();
+ while(methodsIter.hasNext()) {
+ Declaration dec = methodsIter.next();
+ if (dec instanceof MethodDeclaration && isAsyncMethod((MethodDeclaration) dec)) {
+ methodsIter.remove();
+ }
+ }
+
List<AnnotationValue> classNames = new ArrayList<AnnotationValue>();
Map<Object, QName> qNames = new HashMap<Object, QName>();
diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceParametersReturnTypesRule.java b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceParametersReturnTypesRule.java
index 72bea3b..7bccfba 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceParametersReturnTypesRule.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/WebServiceParametersReturnTypesRule.java
@@ -25,6 +25,7 @@
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeHierarchy;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.eclipse.jst.ws.annotations.core.processor.AbstractAnnotationProcessor;
import org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils;
import org.eclipse.jst.ws.internal.jaxws.core.JAXWSCoreMessages;
@@ -217,7 +218,16 @@
private boolean isSuitableInterface(InterfaceDeclaration interfaceDeclaration) {
return isJavaType(interfaceDeclaration.getQualifiedName()) && JAVA_TYPES.contains(interfaceDeclaration.getQualifiedName())
- || isXMLType(interfaceDeclaration);
+ || isXMLType(interfaceDeclaration) || isAsyncType(interfaceDeclaration);
+ }
+
+ private boolean isAsyncType(InterfaceDeclaration interfaceDeclaration) {
+ String qn = Signature.getTypeErasure(interfaceDeclaration.getQualifiedName());
+ if (qn.equals("javax.xml.ws.Response") || qn.equals("java.util.concurrent.Future") //$NON-NLS-1$ //$NON-NLS-2$
+ || qn.equals("javax.xml.ws.AsyncHandler")) { //$NON-NLS-1$
+ return true;
+ }
+ return false;
}
private boolean isXMLType(InterfaceDeclaration interfaceDeclaration) {
diff --git a/features/org.eclipse.jst.ws.jaxws.feature.patch/buildnotes_org.eclipse.jst.ws.jaxws.feature.patch.html b/features/org.eclipse.jst.ws.jaxws.feature.patch/buildnotes_org.eclipse.jst.ws.jaxws.feature.patch.html
index 9c4c1c7..2db7925 100644
--- a/features/org.eclipse.jst.ws.jaxws.feature.patch/buildnotes_org.eclipse.jst.ws.jaxws.feature.patch.html
+++ b/features/org.eclipse.jst.ws.jaxws.feature.patch/buildnotes_org.eclipse.jst.ws.jaxws.feature.patch.html
@@ -18,5 +18,7 @@
<li>org.eclipse.jst.ws.annotations.core</li>
</ul>
+<p>Bug <a href='https://bugs.eclipse.org/404460'>404460</a>. Annotation validator in jaxws.core should not be flagging errors on the generated async methods in the SEI generated by wsimport/wsdl2java </p>
+<p>Bug <a href='https://bugs.eclipse.org/405206'>405206</a>. @FeatureConstructor couldn't be shown in Annotation Properties view</p>
</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.jst.ws.jaxws.feature.patch/feature.xml b/features/org.eclipse.jst.ws.jaxws.feature.patch/feature.xml
index 589d64d..68a7350 100644
--- a/features/org.eclipse.jst.ws.jaxws.feature.patch/feature.xml
+++ b/features/org.eclipse.jst.ws.jaxws.feature.patch/feature.xml
@@ -27,5 +27,12 @@
install-size="0"
version="0.0.0"
unpack="false"/>
+
+ <plugin
+ id="org.eclipse.jst.ws.annotations.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
</feature>