You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2007/02/08 10:14:13 UTC
svn commit: r504833 - in /incubator/cxf/trunk:
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/
rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/
rt/frontend/jaxws/src/...
Author: ffang
Date: Thu Feb 8 01:14:12 2007
New Revision: 504833
URL: http://svn.apache.org/viewvc?view=rev&rev=504833
Log:
[CXF-184] add system test scenario for ParaOrder issue, fix minor bug in HolderOutInteceptor
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java
incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl
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?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- 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 Thu Feb 8 01:14:12 2007
@@ -72,25 +72,16 @@
LOG.fine("client invocation");
// Extract the Holders and store them for later
List<Holder> holders = new ArrayList<Holder>();
- int size = op.getInput().size() + op.getOutput().size();
+ //int size = op.getInput().size() + op.getOutput().size();
+ int size = outObjects.size();
List<Object> newObjects = new ArrayList<Object>(size);
for (int i = 0; i < size; i++) {
newObjects.add(null);
}
-
- for (MessagePartInfo part : parts) {
- int idx = part.getIndex();
- LOG.fine("part name: " + part.getName() + ", index: " + idx);
- if (idx >= 0) {
- Holder holder = (Holder) outObjects.get(idx);
- if (part.getProperty(ReflectionServiceFactoryBean.MODE_INOUT) != null) {
- newObjects.set(idx, holder.value);
- }
- holders.add(holder);
- }
- }
+ int[] argsOffset = removeOutHolderFromParaList(outObjects, parts, holders, size, newObjects);
if (holders.size() == 0) {
+
return;
}
@@ -104,6 +95,7 @@
List<String> ordering = part.getMessageInfo().getOperation().getParameterOrdering();
if (ordering != null && ordering.size() > 0) {
int orderIdx = -1;
+ int argsIndex = 0;
for (int j = 0; j < ordering.size(); j++) {
if (ordering.get(j).equals(part.getName().getLocalPart())) {
orderIdx = j;
@@ -111,9 +103,10 @@
}
}
if (orderIdx != -1) {
- newObjects.set(part.getIndex(), outObjects.get(orderIdx));
+ newObjects.set(part.getIndex() + argsOffset[argsIndex++], outObjects.get(orderIdx));
+
} else {
- newObjects.set(part.getIndex(), outObjects.get(i));
+ newObjects.set(part.getIndex() + argsOffset[argsIndex++], outObjects.get(i));
}
} else {
newObjects.set(part.getIndex(), outObjects.get(i));
@@ -150,5 +143,38 @@
}
}
}
+
+ private int[] removeOutHolderFromParaList(List<Object> outObjects,
+ List<MessagePartInfo> parts,
+ List<Holder> holders,
+ int size,
+ List<Object> newObjects) {
+ int rmCount = 0;
+ int[] argsOffset = new int[size];
+ int argsIndex = 0;
+ for (MessagePartInfo part : parts) {
+ int idx = part.getIndex();
+ LOG.fine("part name: " + part.getName() + ", index: " + idx);
+
+ if (idx >= 0) {
+ Holder holder = (Holder) outObjects.get(idx);
+ if (part.getProperty(ReflectionServiceFactoryBean.MODE_INOUT) != null) {
+ newObjects.set(idx, holder.value);
+ argsOffset[argsIndex++] = rmCount;
+
+ }
+ if (part.getProperty(ReflectionServiceFactoryBean.MODE_OUT) != null) {
+ newObjects.remove(idx + rmCount);
+ rmCount--;
+ argsOffset[argsIndex] = rmCount;
+ }
+
+ holders.add(holder);
+ }
+ }
+ return argsOffset;
+ }
+
+
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Thu Feb 8 01:14:12 2007
@@ -230,6 +230,7 @@
} else if (!isIn && isOut) {
QName name = getOutPartName(o, method, i);
part = o.getOutput().getMessagePart(name);
+ part.setProperty(ReflectionServiceFactoryBean.MODE_OUT, Boolean.TRUE);
initializeParameter(part, paramType, genericType);
part.setIndex(i);
} else if (isIn && isOut) {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java Thu Feb 8 01:14:12 2007
@@ -34,6 +34,7 @@
import org.apache.cxf.transport.local.LocalTransportFactory;
import org.apache.header_test.TestHeaderImpl;
import org.apache.header_test.types.TestHeader5;
+import org.apache.header_test.types.TestHeader5ResponseBody;
public class HeaderTest extends AbstractJaxWsTest {
public void testInvocation() throws Exception {
@@ -56,9 +57,13 @@
assertEquals(TestHeader5.class, part.getTypeClass());
parts = op.getOutput().getMessageParts();
- assertEquals(1, parts.size());
+ assertEquals(2, parts.size());
part = parts.get(0);
+ assertNotNull(part.getTypeClass());
+ assertEquals(TestHeader5ResponseBody.class, part.getTypeClass());
+
+ part = parts.get(1);
assertNotNull(part.getTypeClass());
assertEquals(TestHeader5.class, part.getTypeClass());
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java Thu Feb 8 01:14:12 2007
@@ -47,12 +47,12 @@
import org.apache.header_test.types.TestHeader3;
import org.apache.header_test.types.TestHeader3Response;
import org.apache.header_test.types.TestHeader5;
+import org.apache.header_test.types.TestHeader5ResponseBody;
import org.apache.header_test.types.TestHeader6;
import org.apache.header_test.types.TestHeader6Response;
public class HeaderClientServerTest extends AbstractJaxWsTest {
-
private final QName serviceName = new QName("http://apache.org/header_test",
"SOAPHeaderService");
private final QName portName = new QName("http://apache.org/header_test",
@@ -164,16 +164,16 @@
assertNotNull(service);
TestHeader proxy = service.getPort(portName, TestHeader.class);
try {
+ Holder<TestHeader5ResponseBody> out = new Holder<TestHeader5ResponseBody>();
+ Holder<TestHeader5> outHeader = new Holder<TestHeader5>();
TestHeader5 in = new TestHeader5();
String val = new String(TestHeader5.class.getSimpleName());
for (int idx = 0; idx < 2; idx++) {
- val += idx;
+ val += idx;
in.setRequestType(val);
- TestHeader5 returnVal = proxy.testHeader5(in);
-
- //in copied to return
- assertNotNull(returnVal);
- assertEquals(val, returnVal.getRequestType());
+ proxy.testHeader5(out, outHeader, in);
+ assertEquals(1000, out.value.getResponseType());
+ assertEquals(val, outHeader.value.getRequestType());
}
} catch (UndeclaredThrowableException ex) {
throw (Exception)ex.getCause();
Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java Thu Feb 8 01:14:12 2007
@@ -19,6 +19,7 @@
package org.apache.header_test;
+
import javax.jws.WebService;
import javax.xml.ws.Holder;
@@ -29,6 +30,7 @@
import org.apache.header_test.types.TestHeader3;
import org.apache.header_test.types.TestHeader3Response;
import org.apache.header_test.types.TestHeader5;
+import org.apache.header_test.types.TestHeader5ResponseBody;
import org.apache.header_test.types.TestHeader6;
import org.apache.header_test.types.TestHeader6Response;
@@ -61,7 +63,6 @@
TestHeader2 in,
Holder<TestHeader2Response> out,
Holder<TestHeader2Response> outHeader) {
-
TestHeader2Response outVal = new TestHeader2Response();
outVal.setResponseType(in.getRequestType());
out.value = outVal;
@@ -94,9 +95,17 @@
}
- public TestHeader5 testHeader5(
- TestHeader5 in) {
- return in;
+ public void testHeader5(Holder<TestHeader5ResponseBody> out,
+ Holder<TestHeader5> outHeader,
+ org.apache.header_test.types.TestHeader5 in) {
+ TestHeader5ResponseBody outVal = new TestHeader5ResponseBody();
+ outVal.setResponseType(1000);
+ out.value = outVal;
+
+ TestHeader5 outHeaderVal = new TestHeader5();
+ outHeaderVal.setRequestType(in.getRequestType());
+ outHeader.value = outHeaderVal;
+
}
public TestHeader6Response testHeaderPartBeforeBodyPart(
Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl?view=diff&rev=504833&r1=504832&r2=504833
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl (original)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl Thu Feb 8 01:14:12 2007
@@ -82,6 +82,13 @@
</sequence>
</complexType>
</element>
+ <element name="testHeader5ResponseBody">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="int"/>
+ </sequence>
+ </complexType>
+ </element>
<element name="testHeader6">
<complexType>
<sequence>
@@ -131,6 +138,7 @@
</wsdl:message>
<wsdl:message name="testHeader5Response">
<wsdl:part name="outHeader" element="x1:testHeader5"/>
+ <wsdl:part name="out" element="x1:testHeader5ResponseBody"/>
</wsdl:message>
<wsdl:message name="testHeaderPartBeforeBodyPart">
<wsdl:part name="inoutHeader" element="x1:testHeader3"/>
@@ -160,7 +168,7 @@
<wsdl:input name="testHeader4Request" message="tns:testHeader4Request"/>
<wsdl:output name="testHeader4Response" message="tns:testHeader4Response"/>
</wsdl:operation>
- <wsdl:operation name="testHeader5">
+ <wsdl:operation name="testHeader5" parameterOrder="out outHeader in">
<wsdl:input name="testHeader5Request" message="tns:testHeader5Request"/>
<wsdl:output name="testHeader5Response" message="tns:testHeader5Response"/>
</wsdl:operation>
@@ -221,7 +229,7 @@
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
- <soap:body parts="" use="literal"/>
+ <soap:body parts="out" use="literal"/>
<soap:header message="tns:testHeader5Response" part="outHeader" use="literal"/>
</wsdl:output>
</wsdl:operation>