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 ga...@apache.org on 2008/12/02 23:20:51 UTC
svn commit: r722635 - in /webservices/axis2/trunk/java/modules:
jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/
jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/
jaxws/src/org/apache/axis2...
Author: gawor
Date: Tue Dec 2 14:20:51 2008
New Revision: 722635
URL: http://svn.apache.org/viewvc?rev=722635&view=rev
Log:
allow for null value for XML/HTTP Dispatch invocation when using HTTP GET (AXIS2-4145)
Modified:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/DispatchXMessageSourceTests.java
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/XMessageSourceProvider.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java
Modified: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/DispatchXMessageSourceTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/DispatchXMessageSourceTests.java?rev=722635&r1=722634&r2=722635&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/DispatchXMessageSourceTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/clientTests/dispatch/source/DispatchXMessageSourceTests.java Tue Dec 2 14:20:51 2008
@@ -31,6 +31,8 @@
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.http.HTTPBinding;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -48,6 +50,8 @@
private static String XML_TEXT = "<p:echo xmlns:p=\"http://sample\">hello world</p:echo>";
private static String XML_TEXT_NPE = "<p:echo xmlns:p=\"http://sample\">NPE</p:echo>";
+ private static String GET_RESPONSE = "<response>GET</response>";
+
public static Test suite() {
return getTestSetup(new TestSuite(DispatchXMessageSourceTests.class));
}
@@ -94,6 +98,35 @@
assertTrue(request.equals(response));
}
+ public void testGetRequest() throws Exception {
+ Dispatch<Source> dispatch = getDispatch();
+
+ // this should fail
+ try {
+ dispatch.invoke(null);
+ fail("Did not throw WebServiceException");
+ } catch (WebServiceException e) {
+ // that's what we expect
+ }
+
+ // this should work ok
+ dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_METHOD, "GET");
+ Source outSource = dispatch.invoke(null);
+
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(outSource);
+ Reader2Writer r2w = new Reader2Writer(reader);
+ String response = r2w.getAsString();
+ assertEquals(GET_RESPONSE, response);
+
+ // this should fail again
+ dispatch.getRequestContext().remove(MessageContext.HTTP_REQUEST_METHOD);
+ try {
+ dispatch.invoke(null);
+ fail("Did not throw WebServiceException");
+ } catch (WebServiceException e) {
+ // that's what we expect
+ }
+ }
}
Modified: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/XMessageSourceProvider.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/XMessageSourceProvider.java?rev=722635&r1=722634&r2=722635&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/XMessageSourceProvider.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/xmlhttp/provider/message/source/XMessageSourceProvider.java Tue Dec 2 14:20:51 2008
@@ -19,14 +19,22 @@
package org.apache.axis2.jaxws.xmlhttp.provider.message.source;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import javax.annotation.Resource;
import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.BindingType;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
+import javax.xml.ws.WebServiceContext;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.http.HTTPBinding;
+import org.apache.axis2.transport.http.HTTPConstants;
+
/**
* Sample XML/HTTP String Provider
*/
@@ -35,7 +43,16 @@
@ServiceMode(value=Service.Mode.MESSAGE)
public class XMessageSourceProvider implements Provider<Source> {
+ @Resource
+ public WebServiceContext ctx;
+
public Source invoke(Source input) {
+ String method = (String)ctx.getMessageContext().get(HTTPConstants.HTTP_METHOD);
+ if (input == null) {
+ String request = "<response>" + method + "</response>";
+ ByteArrayInputStream stream = new ByteArrayInputStream(request.getBytes());
+ input = new StreamSource((InputStream) stream);
+ }
return input;
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java?rev=722635&r1=722634&r2=722635&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java Tue Dec 2 14:20:51 2008
@@ -162,7 +162,7 @@
}
}
}
-
+
// Migrate the properties from the client request context bag to
// the request MessageContext.
ApplicationContextMigratorUtil.performMigrationToMessageContext(
@@ -225,6 +225,11 @@
Message requestMsg = createRequestMessage(obj);
setupMessageProperties(requestMsg);
requestMsgCtx.setMessage(requestMsg);
+ // handle HTTP_REQUEST_METHOD property
+ String method = (String)requestContext.get(javax.xml.ws.handler.MessageContext.HTTP_REQUEST_METHOD);
+ if (method != null) {
+ requestMsgCtx.setProperty(org.apache.axis2.Constants.Configuration.HTTP_METHOD, method);
+ }
}
public void invokeOneWay(Object obj) throws WebServiceException {
@@ -536,8 +541,8 @@
}
} else {
// In all cases (PAYLOAD and MESSAGE) we must throw a WebServiceException
- // if the parameter is null.
- if (object == null) {
+ // if the parameter is null and request method is POST or PUT.
+ if (object == null && isPOSTorPUTRequest()) {
throw ExceptionFactory.makeWebServiceException(Messages.getMessage("dispatchNullParamHttpBinding"));
}
}
@@ -553,6 +558,14 @@
return true;
}
+ private boolean isPOSTorPUTRequest() {
+ String method = (String)this.requestContext.get(javax.xml.ws.handler.MessageContext.HTTP_REQUEST_METHOD);
+ // if HTTP_REQUEST_METHOD is not specified, assume it is a POST method
+ return (method == null ||
+ HTTPConstants.HEADER_POST.equalsIgnoreCase(method) ||
+ HTTPConstants.HEADER_PUT.equalsIgnoreCase(method));
+ }
+
private Message createRequestMessage(Object obj) throws WebServiceException {
// Check to see if the object is a valid invocation parameter.