Author: dkulp
Date: Mon Apr 21 20:29:21 2008
New Revision: 650368
URL: http://svn.apache.org/viewvc?rev=650368&view=rev
Log:
[CXF-1537] Bunch of issues with out-of-band headers
Added:
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
(with props)
Modified:
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
Modified:
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java?rev=650368&r1=650367&r2=650368&view=diff
==============================================================================
---
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
(original)
+++
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
Mon Apr 21 20:29:21 2008
@@ -417,6 +417,24 @@
MessageInfo minfo = null;
MessageInfo.Type type;
+ int nextId = 0;
+ minfo = bop.getOperationInfo().getInput();
+ if (minfo != null) {
+ for (MessagePartInfo part : minfo.getMessageParts()) {
+ if (part.getIndex() >= nextId) {
+ nextId = part.getIndex() + 1;
+ }
+ }
+ }
+ minfo = bop.getOperationInfo().getOutput();
+ if (minfo != null) {
+ for (MessagePartInfo part : minfo.getMessageParts()) {
+ if (part.getIndex() >= nextId) {
+ nextId = part.getIndex() + 1;
+ }
+ }
+ }
+
if (isInput) {
type = MessageInfo.Type.INPUT;
minfo = bop.getOperationInfo().getInput();
@@ -428,7 +446,7 @@
if (minfo == null) {
minfo = new MessageInfo(null, type, msg.getQName());
}
- buildMessage(minfo, msg, schemas);
+ buildMessage(minfo, msg, schemas, nextId);
// for wrapped style
OperationInfo unwrapped =
bop.getOperationInfo().getUnwrappedOperation();
@@ -436,6 +454,26 @@
return;
}
+ nextId = 0;
+ minfo = unwrapped.getInput();
+ if (minfo != null) {
+ for (MessagePartInfo part : minfo.getMessageParts()) {
+ if (part.getIndex() >= nextId) {
+ nextId = part.getIndex() + 1;
+ }
+ }
+ }
+ minfo = unwrapped.getOutput();
+ if (minfo != null) {
+ for (MessagePartInfo part : minfo.getMessageParts()) {
+ if (part.getIndex() >= nextId) {
+ nextId = part.getIndex() + 1;
+ }
+ }
+ }
+
+
+
if (isInput) {
minfo = unwrapped.getInput();
type = MessageInfo.Type.INPUT;
@@ -447,11 +485,13 @@
if (minfo == null) {
minfo = new MessageInfo(unwrapped, type, msg.getQName());
}
- buildMessage(minfo, msg, schemas);
+ buildMessage(minfo, msg, schemas, nextId);
}
- private void buildMessage(MessageInfo minfo, javax.wsdl.Message msg,
- SchemaCollection schemas) {
+ private void buildMessage(MessageInfo minfo,
+ javax.wsdl.Message msg,
+ SchemaCollection schemas,
+ int nextId) {
for (Part part : cast(msg.getParts().values(), Part.class)) {
MessagePartInfo pi = minfo.addMessagePart(new
QName(minfo.getName().getNamespaceURI(), part
.getName()));
@@ -466,6 +506,8 @@
}
pi.setProperty(OUT_OF_BAND_HEADER, Boolean.TRUE);
pi.setProperty(HEADER, Boolean.TRUE);
+ pi.setIndex(nextId);
+ nextId++;
}
}
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java?rev=650368&r1=650367&r2=650368&view=diff
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
Mon Apr 21 20:29:21 2008
@@ -59,7 +59,7 @@
List<Holder> outHolders =
CastUtils.cast((List)message.getExchange()
.getOutMessage().get(CLIENT_HOLDERS));
for (MessagePartInfo part : parts) {
- if (part.getIndex() != 0) {
+ if (part.getIndex() != 0 && part.getTypeClass() != null) {
Holder holder = (Holder)outHolders.get(part.getIndex() -
1);
holder.value = inObjects.get(part);
inObjects.put(part, holder);
@@ -68,7 +68,7 @@
} else {
for (MessagePartInfo part : parts) {
int idx = part.getIndex() - 1;
- if (idx >= 0) {
+ if (idx >= 0 && part.getTypeClass() != null) {
if (idx >= inObjects.size()) {
inObjects.set(idx, new Holder<Object>());
} else {
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java?rev=650368&r1=650367&r2=650368&view=diff
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
(original)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
Mon Apr 21 20:29:21 2008
@@ -78,7 +78,7 @@
}
}
for (MessagePartInfo part : parts) {
- if (part.getIndex() > 0) {
+ if (part.getIndex() > 0 && part.getTypeClass() != null) {
Holder holder = (Holder)outObjects.get(part);
outObjects.put(part, holder.value);
}
Modified:
incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java?rev=650368&r1=650367&r2=650368&view=diff
==============================================================================
---
incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
(original)
+++
incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
Mon Apr 21 20:29:21 2008
@@ -231,40 +231,50 @@
outputMessage == null ? new ArrayList<MessagePartInfo>() :
outputMessage.getMessageParts();
// figure out output parts that are not present in input parts
List<MessagePartInfo> outParts = new ArrayList<MessagePartInfo>();
+ int numHeader = 0;
if (isRequestResponse(method)) {
-
for (MessagePartInfo outpart : outputParts) {
- if (isOutOfBandHeader(outpart) && !requireOutOfBandHeader()) {
- continue;
+ boolean oob = false;
+ if (isOutOfBandHeader(outpart)) {
+ if (!requireOutOfBandHeader()) {
+ continue;
+ }
+ oob = true;
}
MessagePartInfo inpart = inputPartsMap.get(outpart.getName());
if (inpart == null) {
outParts.add(outpart);
+ if (oob) {
+ numHeader++;
+ }
continue;
} else if (isSamePart(inpart, outpart)) {
addParameter(method, getParameterFromPart(method, outpart,
JavaType.Style.INOUT));
continue;
} else if (!isSamePart(inpart, outpart)) {
+ if (oob) {
+ numHeader++;
+ }
outParts.add(outpart);
continue;
}
}
}
- if (isRequestResponse(method) && outParts.size() == 1) {
- processReturn(method, outParts.get(0));
- return;
- } else {
- processReturn(method, null);
- }
if (isRequestResponse(method)) {
+ if (outParts.size() - numHeader == 1
+ && !isHeader(outParts.get(0))) {
+ processReturn(method, outParts.get(0));
+ outParts.remove(0);
+ } else {
+ processReturn(method, null);
+ }
for (MessagePartInfo part : outParts) {
- if (isOutOfBandHeader(part) && !requireOutOfBandHeader()) {
- continue;
- }
addParameter(method, getParameterFromPart(method, part,
JavaType.Style.OUT));
}
+ } else {
+ processReturn(method, null);
}
}
Modified:
incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?rev=650368&r1=650367&r2=650368&view=diff
==============================================================================
---
incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
(original)
+++
incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
Mon Apr 21 20:29:21 2008
@@ -211,6 +211,7 @@
}
+
@Test
public void testHeaderFromAnotherMessage4() throws Exception {
env.put(ToolConstants.CFG_WSDLURL,
getLocation("/wsdl2java_wsdl/pizza_wrapped.wsdl"));
@@ -240,6 +241,26 @@
fail("No WebParam found!");
}
}
+ }
+ }
+ }
+
+ @Test
+ public void testHeaderFromAnotherMessage5() throws Exception {
+ env.put(ToolConstants.CFG_WSDLURL,
getLocation("/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl"));
+ env.put(ToolConstants.CFG_EXTRA_SOAPHEADER, "TRUE");
+ processor.setContext(env);
+ processor.execute();
+
+ assertNotNull(output);
+
+ Class clz =
classLoader.loadClass("org.apache.cxf.bugs.oobh.LoginInterface");
+ Method meths[] = clz.getMethods();
+ for (Method m : meths) {
+ if ("login".equals(m.getName())) {
+ assertEquals(String.class, m.getReturnType());
+ assertEquals(2, m.getParameterTypes().length);
+ assertEquals(Holder.class, m.getParameterTypes()[1]);
}
}
}
Added:
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl?rev=650368&view=auto
==============================================================================
---
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
(added)
+++
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
Mon Apr 21 20:29:21 2008
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<wsdl:definitions targetNamespace="http://cxf.apache.org/bugs/oobh"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://cxf.apache.org/bugs/oobh"
xmlns:intf="http://cxf.apache.org/bugs/oobh"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <wsdl:types>
+
+ <schema targetNamespace="http://cxf.apache.org/bugs/oobh"
xmlns="http://www.w3.org/2001/XMLSchema">
+ <!-- type defined for soap header -->
+ <complexType name="SessionHeader">
+ <sequence>
+ <element name="SessionId" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ <element name="SessionHeader" type="impl:SessionHeader"/>
+
+ <!-- elements for Login operation messages -->
+ <complexType name="LoginRequest">
+ <sequence>
+ <element name="UserName" type="xsd:string"/>
+ <element name="Password" type="xsd:string"/>
+ </sequence>
+ </complexType>
+ <element name="Login" type="impl:LoginRequest"/>
+ <element name="LoginReturn" type="xsd:string"/>
+ </schema>
+ </wsdl:types>
+ <wsdl:message name="SessionHeader">
+ <wsdl:part name="SessionHeader" element="impl:SessionHeader"/>
+ </wsdl:message>
+ <wsdl:message name="LoginRequest">
+ <wsdl:part name="param" element="impl:Login"/>
+ </wsdl:message>
+ <wsdl:message name="LoginResponse">
+ <wsdl:part name="param" element="impl:LoginReturn"/>
+ </wsdl:message>
+
+ <wsdl:portType name="LoginInterface">
+ <wsdl:operation name="Login">
+ <wsdl:input name="LoginRequest" message="impl:LoginRequest"/>
+ <wsdl:output name="LoginResponse" message="impl:LoginResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="LoginServiceSoapBinding" type="impl:LoginInterface">
+ <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="Login">
+ <wsdlsoap:operation soapAction=""/>
+ <wsdl:input>
+ <wsdlsoap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <wsdlsoap:header message="impl:SessionHeader"
part="SessionHeader" use="literal"/>
+ <wsdlsoap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+
+ <wsdl:service name="LoginService">
+ <wsdl:port name="Login" binding="impl:LoginServiceSoapBinding">
+ <wsdlsoap:address location="http://localhost:9999/Login"/>
+ </wsdl:port>
+ </wsdl:service >
+</wsdl:definitions>
+
Propchange:
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/OutOfBandHeaderBug.wsdl
------------------------------------------------------------------------------
svn:mime-type = text/xml