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/03/28 09:28:18 UTC
svn commit: r523211 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/endpoint/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/
rt/frontend/jaxws/src/test/java/org/apach...
Author: ffang
Date: Wed Mar 28 00:28:17 2007
New Revision: 523211
URL: http://svn.apache.org/viewvc?view=rev&rev=523211
Log:
[CXF-496] support null holder
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java?view=diff&rev=523211&r1=523210&r2=523211
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java Wed Mar 28 00:28:17 2007
@@ -31,7 +31,7 @@
public interface Client extends InterceptorProvider, MessageObserver {
String REQUEST_CONTEXT = "RequestContext";
String RESPONSE_CONTEXT = "ResponseContext";
-
+ String REQUEST_METHOD = "RequestMethod";
/**
* Invokes an operation syncronously
* @param operationName The name of the operation to be invoked. The service namespace will be used
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java?view=diff&rev=523211&r1=523210&r2=523211
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java Wed Mar 28 00:28:17 2007
@@ -111,9 +111,9 @@
context.put(Client.REQUEST_CONTEXT, reqContext);
context.put(Client.RESPONSE_CONTEXT, respContext);
-
+
reqContext.put(Method.class.getName(), method);
-
+ reqContext.put(Client.REQUEST_METHOD, method);
boolean isAsync = method.getName().endsWith("Async");
Object result = null;
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=523211&r1=523210&r2=523211
==============================================================================
--- 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 Wed Mar 28 00:28:17 2007
@@ -19,12 +19,14 @@
package org.apache.cxf.jaxws.interceptors;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.xml.ws.Holder;
+import org.apache.cxf.endpoint.Client;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
@@ -78,6 +80,8 @@
for (int i = 0; i < size; i++) {
newObjects.add(null);
}
+
+ handleNullHolder(message, outObjects);
int[] argsOffset = removeOutHolderFromParaList(outObjects, parts, holders, size, newObjects);
if (holders.size() == 0) {
@@ -117,33 +121,54 @@
message.setContent(List.class, newObjects);
message.getExchange().put(HolderInInterceptor.CLIENT_HOLDERS, holders);
} else {
- // Add necessary holders so we match the method signature of the service class
- List<Object> reqObjects =
- CastUtils.cast(message.getExchange().getInMessage().getContent(List.class));
-
- int outIdx = 0;
- for (MessagePartInfo part : parts) {
- if (part.getIndex() == -1) {
- outIdx++;
- break;
- }
+ handleResponse(message, outObjects, parts);
+ }
+ }
+
+ private void handleResponse(Message message, List<Object> outObjects, List<MessagePartInfo> parts) {
+ // Add necessary holders so we match the method signature of the service class
+ List<Object> reqObjects =
+ CastUtils.cast(message.getExchange().getInMessage().getContent(List.class));
+
+ int outIdx = 0;
+ for (MessagePartInfo part : parts) {
+ if (part.getIndex() == -1) {
+ outIdx++;
+ break;
}
-
- for (MessagePartInfo part : parts) {
- int methodIdx = part.getIndex();
- if (methodIdx >= 0) {
- Holder holder = (Holder) reqObjects.get(methodIdx);
- Object o = holder.value;
- if (outIdx >= outObjects.size()) {
- outObjects.add(o);
- } else {
- outObjects.add(outIdx, o);
- }
- outIdx++;
+ }
+
+ for (MessagePartInfo part : parts) {
+ int methodIdx = part.getIndex();
+ if (methodIdx >= 0) {
+ Holder holder = (Holder) reqObjects.get(methodIdx);
+ Object o = holder.value;
+ if (outIdx >= outObjects.size()) {
+ outObjects.add(o);
+ } else {
+ outObjects.add(outIdx, o);
}
+ outIdx++;
}
- message.setContent(List.class, outObjects);
}
+ message.setContent(List.class, outObjects);
+ }
+
+ private void handleNullHolder(Message message, List<Object> outObjects) {
+ //process outObjects if Holder itself is null
+ Method method = (Method)message.get(Client.REQUEST_METHOD);
+ if (method == null) {
+ return;
+ }
+ Class<?>[] paramTypes = method.getParameterTypes();
+ int idx = 0;
+ for (Class rawClass : paramTypes) {
+ if (rawClass.equals(Holder.class) && outObjects.get(idx) == null) {
+ outObjects.set(idx, new Holder());
+ }
+ idx++;
+ }
+
}
private int[] removeOutHolderFromParaList(List<Object> outObjects,
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=523211&r1=523210&r2=523211
==============================================================================
--- 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 Wed Mar 28 00:28:17 2007
@@ -286,6 +286,20 @@
throw (Exception)ex.getCause();
}
}
+
+ @Test
+ public void testHolderNull() {
+ URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
+ assertNotNull(wsdl);
+
+ SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
+ assertNotNull(service);
+ TestHeader proxy = service.getPort(portName, TestHeader.class);
+ proxy.testHeader2(null, null, null);
+ proxy.testHeader3(null, null);
+ proxy.testHeader5(null, null, null);
+ proxy.testHeaderPartBeforeBodyPart(null, null);
+ }
// REVIST: This is not a valid WSDL according to WSI-BP V1.0
// @Test