You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ba...@apache.org on 2006/11/21 20:37:23 UTC
svn commit: r477841 - in /webservices/axis2/trunk/java/modules/jaxws:
src/org/apache/axis2/jaxws/description/impl/
test/org/apache/axis2/jaxws/description/
test/org/apache/axis2/jaxws/description/jaxws/
test/org/apache/axis2/jaxws/framework/
Author: barrettj
Date: Tue Nov 21 11:37:22 2006
New Revision: 477841
URL: http://svn.apache.org/viewvc?view=rev&rev=477841
Log:
Add logic to handle a possible jaxws subpackage under the SEI package for generated request and response wrapper artifacts.
Added:
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/WrapperPackageTests.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1Response.java
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java?view=diff&rev=477841&r1=477840&r2=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java Tue Nov 21 11:37:22 2006
@@ -244,4 +244,10 @@
}
return protocol + "://" + sb.toString() + "/";
}
+
+ static Class loadClass(String className)throws ClassNotFoundException {
+ // TODO J2W AccessController Needed
+ // Don't make this public, its a security exposure
+ return Class.forName(className, true, Thread.currentThread().getContextClassLoader());
+ }
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java?view=diff&rev=477841&r1=477840&r2=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java Tue Nov 21 11:37:22 2006
@@ -610,6 +610,7 @@
String className = DescriptionUtils.javaMethodtoClassName(seiMethod.getName());
requestWrapperClassName = packageName + "." + className;
}
+ requestWrapperClassName = determineActualAritfactPackage(requestWrapperClassName);
}
}
return requestWrapperClassName;
@@ -708,10 +709,11 @@
Class clazz = seiMethod.getDeclaringClass();
String packageName = clazz.getPackage().getName();
String className = DescriptionUtils.javaMethodtoClassName(seiMethod.getName());
- responseWrapperClassName = packageName + "." + className;
+ responseWrapperClassName = packageName + "." + className + "Response";
} else {
- responseWrapperClassName = methodComposite.getDeclaringClass();
+ responseWrapperClassName = methodComposite.getDeclaringClass() + "Response";
}
+ responseWrapperClassName = determineActualAritfactPackage(responseWrapperClassName);
}
}
return responseWrapperClassName;
@@ -1083,4 +1085,58 @@
else
return false;
}
+
+ /**
+ * Determine the actual packager name for the generated artifacts by trying to load the class from one of two
+ * packages. This is necessary because the RI implementations of WSGen and WSImport generate the artifacts
+ * in different packages:
+ * - WSImport generates the artifacts in the same package as the SEI
+ * - WSGen generates the artifacts in a "jaxws" sub package under the SEI package.
+ * Note that from reading the JAX-WS spec, it seems that WSGen is doing that correctly; See
+ * the conformance requirement in JAX-WS 2.0 Spec Section 3.6.2.1 Document Wrapped on page 36:
+ * Conformance (Default wrapper bean package): In the absence of customizations, the wrapper beans package
+ * MUST be a generated jaxws subpackage of the SEI package.
+ * ^^^^^^^^^^^^^^^^
+ * @param requestWrapperClassName
+ * @return
+ */
+ private static final String JAXWS_SUBPACKAGE = "jaxws";
+ private static String determineActualAritfactPackage(String wrapperClassName) {
+ String returnWrapperClassName = null;
+
+ // Try to load the class that was passed in
+ try {
+ DescriptionUtils.loadClass(wrapperClassName);
+ returnWrapperClassName = wrapperClassName;
+ }
+ catch (ClassNotFoundException e) {
+ // Couldn't load the class; we'll try another one below.
+ }
+
+ // If the original class couldn't be loaded, try adding ".jaxws." to the package
+ if (returnWrapperClassName == null) {
+ String originalPackage = DescriptionUtils.getJavaPackageName(wrapperClassName);
+ if (originalPackage != null) {
+ String alternatePackage = originalPackage + "." + JAXWS_SUBPACKAGE;
+ String className = DescriptionUtils.getSimpleJavaClassName(wrapperClassName);
+ String alternateWrapperClass = alternatePackage + "." + className;
+ try {
+ DescriptionUtils.loadClass(alternateWrapperClass);
+ returnWrapperClassName = alternateWrapperClass;
+ }
+ catch (ClassNotFoundException e) {
+ // Couldn't load the class
+ }
+ }
+ }
+
+ if (returnWrapperClassName == null){
+ // Couldn't load either class, so stick with the original wrapper class name
+ // REVIEW: Is this correct behavior? Note that some of the annotation unit tests don't have the actual
+ // classes available, and so will fail if this is changed.
+ returnWrapperClassName = wrapperClassName;
+ }
+ return returnWrapperClassName;
+ }
+
}
Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java?view=diff&rev=477841&r1=477840&r2=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java Tue Nov 21 11:37:22 2006
@@ -376,7 +376,7 @@
assertEquals("http://description.jaxws.axis2.apache.org/", operationDesc.getRequestWrapperTargetNamespace());
assertEquals("http://description.jaxws.axis2.apache.org/", operationDesc.getResponseWrapperTargetNamespace());
assertEquals("org.apache.axis2.jaxws.description.WrappedParams", operationDesc.getRequestWrapperClassName());
- assertEquals("org.apache.axis2.jaxws.description.WrappedParams", operationDesc.getResponseWrapperClassName());
+ assertEquals("org.apache.axis2.jaxws.description.WrappedParamsResponse", operationDesc.getResponseWrapperClassName());
// Test WebResult annotation defaults
assertNull(((OperationDescriptionJava) operationDesc).getAnnoWebResult());
assertFalse(((OperationDescriptionJava) operationDesc).isWebResultAnnotationSpecified());
@@ -412,7 +412,7 @@
assertEquals("http://description.jaxws.axis2.apache.org/", operationDesc.getRequestWrapperTargetNamespace());
assertEquals("http://description.jaxws.axis2.apache.org/", operationDesc.getResponseWrapperTargetNamespace());
assertEquals("org.apache.axis2.jaxws.description.WrappedParams", operationDesc.getRequestWrapperClassName());
- assertEquals("org.apache.axis2.jaxws.description.WrappedParams", operationDesc.getResponseWrapperClassName());
+ assertEquals("org.apache.axis2.jaxws.description.WrappedParamsResponse", operationDesc.getResponseWrapperClassName());
operationDesc = testEndpointInterfaceDesc.getOperationForJavaMethod("bareParams")[0];
assertNotNull(operationDesc);
@@ -441,7 +441,7 @@
assertEquals("http://a.b.c.method2ReqTNS", operationDesc.getRequestWrapperTargetNamespace());
assertEquals("http://a.b.c.method2RspTNS", operationDesc.getResponseWrapperTargetNamespace());
assertEquals("org.apache.axis2.jaxws.description.method2ReqWrapper", operationDesc.getRequestWrapperClassName());
- assertEquals("org.apache.axis2.jaxws.description.Method2", operationDesc.getResponseWrapperClassName());
+ assertEquals("org.apache.axis2.jaxws.description.Method2Response", operationDesc.getResponseWrapperClassName());
}
public void testWebMethod() {
Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/WrapperPackageTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/WrapperPackageTests.java?view=auto&rev=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/WrapperPackageTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/WrapperPackageTests.java Tue Nov 21 11:37:22 2006
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.description;
+
+import javax.jws.WebService;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the request and response wrappers based on the different values used by
+ * WSGen and WSImport; WSGen generates artifacts in the "jaxws" package below the
+ * SEI package (which seems to be correct per JAX-WS 2.0 Spec Section 3.6.2.1) while
+ * WSImport generates them in the same package of the SEI.
+ */
+public class WrapperPackageTests extends TestCase {
+
+ public void testSEIPackageWrapper() {
+ EndpointInterfaceDescription eiDesc = getEndpointInterfaceDesc(SEIPackageWrapper.class);
+ OperationDescription opDesc = eiDesc.getOperation("method1");
+ String requestWrapperClass = opDesc.getRequestWrapperClassName();
+ assertEquals("org.apache.axis2.jaxws.description.Method1", requestWrapperClass);
+ String responseWrapperClass = opDesc.getResponseWrapperClassName();
+ assertEquals("org.apache.axis2.jaxws.description.Method1Response", responseWrapperClass);
+
+ }
+
+ public void testSEISubPackageWrapper() {
+ EndpointInterfaceDescription eiDesc = getEndpointInterfaceDesc(SEISubPackageWrapper.class);
+ OperationDescription opDesc = eiDesc.getOperation("subPackageMethod1");
+ String requestWrapperClass = opDesc.getRequestWrapperClassName();
+ assertEquals("org.apache.axis2.jaxws.description.jaxws.SubPackageMethod1", requestWrapperClass);
+ String responseWrapperClass = opDesc.getResponseWrapperClassName();
+ assertEquals("org.apache.axis2.jaxws.description.jaxws.SubPackageMethod1Response", responseWrapperClass);
+
+ }
+
+ /*
+ * Method to return the endpoint interface description for a given implementation class.
+ */
+ private EndpointInterfaceDescription getEndpointInterfaceDesc(Class implementationClass) {
+ // Use the description factory directly; this will be done within the JAX-WS runtime
+ ServiceDescription serviceDesc =
+ DescriptionFactory.createServiceDescriptionFromServiceImpl(implementationClass, null);
+ assertNotNull(serviceDesc);
+
+ EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions();
+ assertNotNull(endpointDesc);
+ assertEquals(1, endpointDesc.length);
+
+ // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0]
+ EndpointDescription testEndpointDesc = endpointDesc[0];
+ EndpointInterfaceDescription testEndpointInterfaceDesc = testEndpointDesc.getEndpointInterfaceDescription();
+ assertNotNull(testEndpointInterfaceDesc);
+
+ return testEndpointInterfaceDesc;
+ }
+}
+
+@WebService()
+class SEIPackageWrapper {
+ @RequestWrapper()
+ @ResponseWrapper()
+ public String method1(String string) {
+ return string;
+ }
+}
+
+class Method1 {
+
+}
+
+class Method1Response {
+
+}
+
+@WebService()
+class SEISubPackageWrapper {
+ @RequestWrapper()
+ @ResponseWrapper()
+ public String subPackageMethod1(String string) {
+ return string;
+ }
+}
\ No newline at end of file
Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1.java?view=auto&rev=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1.java Tue Nov 21 11:37:22 2006
@@ -0,0 +1,9 @@
+package org.apache.axis2.jaxws.description.jaxws;
+
+/**
+ * Used by WrappedPackageTests
+ *
+ */
+public class SubPackageMethod1 {
+
+}
Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1Response.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1Response.java?view=auto&rev=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1Response.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/description/jaxws/SubPackageMethod1Response.java Tue Nov 21 11:37:22 2006
@@ -0,0 +1,9 @@
+package org.apache.axis2.jaxws.description.jaxws;
+
+/**
+ * Used by WrappedPackageTests
+ *
+ */
+public class SubPackageMethod1Response {
+
+}
Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java?view=diff&rev=477841&r1=477840&r2=477841
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java Tue Nov 21 11:37:22 2006
@@ -33,6 +33,7 @@
import org.apache.axis2.jaxws.description.ValidateWSDLTests;
import org.apache.axis2.jaxws.description.WSDLDescriptionTests;
import org.apache.axis2.jaxws.description.WSDLTests;
+import org.apache.axis2.jaxws.description.WrapperPackageTests;
import org.apache.axis2.jaxws.description.builder.DescriptionBuilderTests;
import org.apache.axis2.jaxws.description.impl.ServiceDescriptionTests;
import org.apache.axis2.jaxws.dispatch.SOAP12Dispatch;
@@ -108,6 +109,7 @@
suite.addTestSuite(PartialWSDLTests.class);
suite.addTestSuite(ValidateWSDLTests.class);
suite.addTestSuite(GetDescFromBindingProvider.class);
+ suite.addTestSuite(WrapperPackageTests.class);
suite.addTestSuite(HandlerChainProcessorTests.class);
suite.addTestSuite(JaxwsMessageBundleTests.class);
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org