You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/03/13 12:18:26 UTC
svn commit: r753205 - in /cxf/trunk:
rt/core/src/main/java/org/apache/cxf/catalog/
tools/common/src/main/java/org/apache/cxf/tools/common/model/
tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/
tools/w...
Author: dkulp
Date: Fri Mar 13 11:18:26 2009
New Revision: 753205
URL: http://svn.apache.org/viewvc?rev=753205&view=rev
Log:
[CXF-2054] Fix problems with async method code generation
Modified:
cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogWSDLLocator.java
cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaParameter.java
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_async.wsdl
Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogWSDLLocator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogWSDLLocator.java?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogWSDLLocator.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogWSDLLocator.java Fri Mar 13 11:18:26 2009
@@ -56,8 +56,8 @@
}
public InputSource getBaseInputSource() {
- InputSource result = resolver.resolve(baseUri, null);
- if (result == null && catalogResolver != null) {
+ InputSource result = null;
+ if (catalogResolver != null) {
try {
String s = catalogResolver.resolveSystem(baseUri);
if (s != null) {
@@ -69,6 +69,9 @@
//ignore
}
}
+ if (result == null) {
+ result = resolver.resolve(baseUri, null);
+ }
if (wsdlUrl == null
&& result != null) {
wsdlUrl = result.getSystemId();
Modified: cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaParameter.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaParameter.java?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaParameter.java (original)
+++ cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaParameter.java Fri Mar 13 11:18:26 2009
@@ -71,7 +71,9 @@
public JAnnotation getAnnotation(String tag) {
return annotations.get(tag);
}
-
+ public Collection<String> getAnnotationTags() {
+ return this.annotations.keySet();
+ }
public Collection<JAnnotation> getAnnotations() {
return this.annotations.values();
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java Fri Mar 13 11:18:26 2009
@@ -130,6 +130,9 @@
}
public Element getTargetNode(String uri) {
+ if (uri.equals(wsdlURL) && wsdlNode != null) {
+ return wsdlNode;
+ }
Document doc = null;
InputStream ins = null;
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/OperationProcessor.java Fri Mar 13 11:18:26 2009
@@ -20,7 +20,6 @@
package org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal;
import java.util.Collection;
-import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
@@ -178,7 +177,9 @@
}
private boolean isAsyncMethod(JavaMethod method) {
- if (method.getName().endsWith(ToolConstants.ASYNC_METHOD_SUFFIX)) {
+ if (method.getName().endsWith(ToolConstants.ASYNC_METHOD_SUFFIX)
+ && method.getReturn() != null
+ && method.getReturn().getClassName() != null) {
if (method.getReturn().getClassName().startsWith("Response<")) {
return true;
} else if (method.getParameterCount() > 0
@@ -217,15 +218,40 @@
callbackMethod.addAnnotation("RequestWrapper", method.getAnnotationMap().get("RequestWrapper"));
callbackMethod.addAnnotation("SOAPBinding", method.getAnnotationMap().get("SOAPBinding"));
- for (Iterator iter = method.getParameters().iterator(); iter.hasNext();) {
- callbackMethod.addParameter((JavaParameter)iter.next());
+ boolean convertOutToAsync = !method.isWrapperStyle()
+ && "void".equals(method.getReturn().getClassName());
+ String asyncCname = null;
+ for (JavaParameter param : method.getParameters()) {
+ if (convertOutToAsync) {
+ if (param.isHolder()) {
+ if (param.isINOUT()) {
+ JavaParameter p2 = new JavaParameter();
+
+ p2.setName(param.getName());
+ p2.setClassName(param.getHolderName());
+ p2.setStyle(JavaType.Style.IN);
+ callbackMethod.addParameter(p2);
+ for (String s : param.getAnnotationTags()) {
+ JAnnotation ann = param.getAnnotation(s);
+ p2.addAnnotation(s, ann);
+ }
+ } else if (!param.isHeader() && asyncCname == null) {
+ asyncCname = param.getClassName();
+ }
+ } else {
+ callbackMethod.addParameter(param);
+ }
+ } else {
+ callbackMethod.addParameter(param);
+ }
}
-
JavaParameter asyncHandler = new JavaParameter();
asyncHandler.setName("asyncHandler");
asyncHandler.setCallback(true);
- asyncHandler.setClassName(getAsyncClassName(method, "AsyncHandler"));
+ asyncHandler.setClassName(getAsyncClassName(method,
+ "AsyncHandler",
+ asyncCname));
asyncHandler.setStyle(JavaType.Style.IN);
callbackMethod.addParameter(asyncHandler);
@@ -248,8 +274,37 @@
pollingMethod.setSoapAction(method.getSoapAction());
pollingMethod.setOperationName(method.getOperationName());
+
+ boolean convertOutToAsync = !method.isWrapperStyle()
+ && "void".equals(method.getReturn().getClassName());
+ String asyncCname = null;
+ for (JavaParameter param : method.getParameters()) {
+ if (convertOutToAsync) {
+ if (param.isHolder()) {
+ if (param.isINOUT()) {
+ JavaParameter p2 = new JavaParameter();
+
+ p2.setName(param.getName());
+ p2.setClassName(param.getHolderName());
+ p2.setStyle(JavaType.Style.IN);
+ pollingMethod.addParameter(p2);
+ for (String s : param.getAnnotationTags()) {
+ JAnnotation ann = param.getAnnotation(s);
+ p2.addAnnotation(s, ann);
+ }
+ } else if (!param.isHeader() && asyncCname == null) {
+ asyncCname = param.getClassName();
+ }
+ } else {
+ pollingMethod.addParameter(param);
+ }
+ } else {
+ pollingMethod.addParameter(param);
+ }
+ }
+
JavaReturn response = new JavaReturn();
- response.setClassName(getAsyncClassName(method, "Response"));
+ response.setClassName(getAsyncClassName(method, "Response", asyncCname));
pollingMethod.setReturn(response);
// REVISIT: test the operation name in the annotation
@@ -258,25 +313,22 @@
pollingMethod.addAnnotation("ResponseWrapper", method.getAnnotationMap().get("ResponseWrapper"));
pollingMethod.addAnnotation("SOAPBinding", method.getAnnotationMap().get("SOAPBinding"));
- for (Iterator iter = method.getParameters().iterator(); iter.hasNext();) {
- pollingMethod.addParameter((JavaParameter)iter.next());
- }
-
method.getInterface().addMethod(pollingMethod);
}
- private String getAsyncClassName(JavaMethod method, String clzName) {
- String response;
- if (wrapperResponse != null) {
- response = wrapperResponse.getClassName();
- } else {
- response = method.getReturn().getClassName();
- }
- Class<?> mappedClass = JAXBUtils.holderClass(response);
- if (mappedClass != null) {
- response = mappedClass.getName();
+ private String getAsyncClassName(JavaMethod method, String clzName, String name) {
+ String response = name;
+ if (response == null) {
+ if (wrapperResponse != null) {
+ response = wrapperResponse.getClassName();
+ } else {
+ response = method.getReturn().getClassName();
+ }
+ Class<?> mappedClass = JAXBUtils.holderClass(response);
+ if (mappedClass != null) {
+ response = mappedClass.getName();
+ }
}
-
StringBuffer sb = new StringBuffer();
sb.append(clzName);
sb.append("<");
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java Fri Mar 13 11:18:26 2009
@@ -454,7 +454,8 @@
found = true;
}
}
- if (jm.getReturn().getName().equals(soapHeader.getPart())) {
+ if (jm.getReturn().getName() != null
+ && jm.getReturn().getName().equals(soapHeader.getPart())) {
found = true;
}
if (Boolean.valueOf((String)context.get(ToolConstants.CFG_EXTRA_SOAPHEADER))
Modified: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_async.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_async.wsdl?rev=753205&r1=753204&r2=753205&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_async.wsdl (original)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/hello_world_async.wsdl Fri Mar 13 11:18:26 2009
@@ -17,92 +17,164 @@
specific language governing permissions and limitations
under the License.
-->
-<wsdl:definitions
- xmlns="http://schemas.xmlsoap.org/wsdl/"
- xmlns:http-conf="http://schemas.iona.com/transports/http/configuration"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:tns="http://cxf.apache.org/w2j/hello_world_async_soap_http"
- xmlns:x1="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+<wsdl:definitions
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:http-conf="http://schemas.iona.com/transports/http/configuration"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://cxf.apache.org/w2j/hello_world_async_soap_http"
+ xmlns:x1="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
- targetNamespace="http://cxf.apache.org/w2j/hello_world_async_soap_http"
+ targetNamespace="http://cxf.apache.org/w2j/hello_world_async_soap_http"
name="HelloWorld">
<jaxws:bindings>
- <jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>
+ <jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>
</jaxws:bindings>
<wsdl:types>
- <schema
- targetNamespace="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
- xmlns="http://www.w3.org/2001/XMLSchema"
- xmlns:x1="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
- elementFormDefault="qualified">
- <element name="greetMeSometime">
- <complexType>
- <sequence>
- <element name="requestType" type="xsd:string"/>
- </sequence>
- </complexType>
- </element>
- <element name="greetMeSometimeResponse">
- <complexType>
- <sequence>
- <element name="responseType" type="xsd:string"/>
- </sequence>
- </complexType>
- </element>
- <element name="testInt" type="xsd:int"/>
- <element name="testIntResponse" type="xsd:int"/>
- </schema>
+ <schema
+ targetNamespace="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:x1="http://cxf.apache.org/w2j/hello_world_async_soap_http/types"
+ elementFormDefault="qualified">
+ <element name="greetMeSometime">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeSometimeResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeWithHeader">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeWithHeaderResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeAsync">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeAsyncResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="header" type="xsd:int"/>
+ <element name="testInt" type="xsd:int"/>
+ <element name="testIntResponse" type="xsd:int"/>
+ </schema>
</wsdl:types>
<wsdl:message name="greetMeSometimeRequest">
- <wsdl:part name="in" element="x1:greetMeSometime"/>
+ <wsdl:part name="in" element="x1:greetMeSometime"/>
</wsdl:message>
<wsdl:message name="greetMeSometimeResponse">
- <wsdl:part name="out" element="x1:greetMeSometimeResponse"/>
+ <wsdl:part name="out" element="x1:greetMeSometimeResponse"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeWithHeaderRequest">
+ <wsdl:part name="in" element="x1:greetMeWithHeader"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeWithHeaderResponse">
+ <wsdl:part name="out" element="x1:greetMeWithHeaderResponse"/>
+ <wsdl:part name="header" element="x1:header"/>
+ </wsdl:message>
+ <wsdl:message name="HEADER">
+ <wsdl:part name="header" element="x1:header"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeAsync">
+ <wsdl:part name="in" element="x1:greetMeAsync"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeAsyncResponse">
+ <wsdl:part name="out" element="x1:greetMeAsyncResponse"/>
</wsdl:message>
<wsdl:message name="testIntRequest">
- <wsdl:part name="parameters" element="x1:testInt"></wsdl:part>
+ <wsdl:part name="parameters" element="x1:testInt"></wsdl:part>
</wsdl:message>
<wsdl:message name="testIntResponse">
- <wsdl:part name="parameters" element="x1:testIntResponse"></wsdl:part>
+ <wsdl:part name="parameters" element="x1:testIntResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="GreeterAsync">
- <wsdl:operation name="greetMeSometime">
- <wsdl:input name="greetMeSometimeRequest" message="tns:greetMeSometimeRequest"/>
- <wsdl:output name="greetMeSometimeResponse" message="tns:greetMeSometimeResponse"/>
- </wsdl:operation>
- <wsdl:operation name="testInt">
- <wsdl:input message="tns:testIntRequest"></wsdl:input>
- <wsdl:output message="tns:testIntResponse"></wsdl:output>
- </wsdl:operation>
+ <wsdl:operation name="greetMeSometime">
+ <wsdl:input name="greetMeSometimeRequest" message="tns:greetMeSometimeRequest"/>
+ <wsdl:output name="greetMeSometimeResponse" message="tns:greetMeSometimeResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="testInt">
+ <wsdl:input message="tns:testIntRequest"></wsdl:input>
+ <wsdl:output message="tns:testIntResponse"></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeWithHeader">
+ <wsdl:input message="tns:greetMeWithHeaderRequest"></wsdl:input>
+ <wsdl:output message="tns:greetMeWithHeaderResponse"></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeAsync">
+ <wsdl:input message="tns:greetMeAsync"></wsdl:input>
+ <wsdl:output message="tns:greetMeAsyncResponse"></wsdl:output>
+ </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="GreeterAsync_SOAPBinding" type="tns:GreeterAsync">
- <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
- <wsdl:operation name="greetMeSometime">
- <soap:operation style="document"/>
- <wsdl:input>
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
- <wsdl:operation name="testInt">
- <soap:operation style="document"/>
- <wsdl:input>
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="greetMeSometime">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="testInt">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeWithHeader">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal" parts="in"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" parts="out"/>
+ <soap:header message="tns:greetMeWithHeaderResponse" part="header" use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeAsync">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
</wsdl:binding>
<wsdl:service name="SOAPService">
- <wsdl:port name="SoapPort" binding="tns:GreeterAsync_SOAPBinding">
- <soap:address location="http://localhost:9000/SoapContext/SoapPort"/>
- <http-conf:client/>
- <http-conf:server/>
- </wsdl:port>
+ <wsdl:port name="SoapPort" binding="tns:GreeterAsync_SOAPBinding">
+ <soap:address location="http://localhost:9000/SoapContext/SoapPort"/>
+ <http-conf:client/>
+ <http-conf:server/>
+ </wsdl:port>
</wsdl:service>
</wsdl:definitions>