You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sc...@apache.org on 2008/08/07 00:36:07 UTC
svn commit: r683433 - in
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws:
client/dispatch/ client/proxy/ core/ message/util/
Author: scheu
Date: Wed Aug 6 15:36:06 2008
New Revision: 683433
URL: http://svn.apache.org/viewvc?rev=683433&view=rev
Log:
AXIS2-3966
Contributor:Rich Scheuerle
Ater processing completes on the client proxy/dispatch/asyncResponce, free the input stream so that the transport.
Freeing the input stream will allow the transport to free/pool its resources.
In this case, freeing the input stream is accomplished by invoking the detach() method on the DetachableInputStream.
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/JAXBDispatchAsyncListener.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/XMLDispatchAsyncListener.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/Reader.java
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=683433&r1=683432&r2=683433&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 Wed Aug 6 15:36:06 2008
@@ -50,6 +50,8 @@
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.http.HTTPBinding;
import javax.xml.ws.soap.SOAPBinding;
+
+import java.io.IOException;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
@@ -165,9 +167,22 @@
throw wse;
}
- Message responseMsg = responseMsgCtx.getMessage();
- Object returnObj = getValueFromMessage(responseMsg);
-
+ // Get the return object
+ Object returnObj = null;
+ try {
+ Message responseMsg = responseMsgCtx.getMessage();
+ returnObj = getValueFromMessage(responseMsg);
+ }
+ finally {
+ // Free the incoming input stream
+ try {
+ responseMsgCtx.freeInputStream();
+ }
+ catch (Throwable t) {
+ throw ExceptionFactory.makeWebServiceException(t);
+ }
+ }
+
//Check to see if we need to maintain session state
checkMaintainSessionState(requestMsgCtx, invocationContext);
@@ -424,16 +439,25 @@
* @return
*/
public static WebServiceException getFaultResponse(MessageContext msgCtx) {
- Message msg = msgCtx.getMessage();
- if (msg != null && msg.isFault()) {
- //XMLFault fault = msg.getXMLFault();
- // 4.3.2 conformance bullet 1 requires a ProtocolException here
- ProtocolException pe =
+ try {
+ Message msg = msgCtx.getMessage();
+ if (msg != null && msg.isFault()) {
+ //XMLFault fault = msg.getXMLFault();
+ // 4.3.2 conformance bullet 1 requires a ProtocolException here
+ ProtocolException pe =
MethodMarshallerUtils.createSystemException(msg.getXMLFault(), msg);
- return pe;
- } else if (msgCtx.getLocalException() != null) {
- // use the factory, it'll throw the right thing:
- return ExceptionFactory.makeWebServiceException(msgCtx.getLocalException());
+ return pe;
+ } else if (msgCtx.getLocalException() != null) {
+ // use the factory, it'll throw the right thing:
+ return ExceptionFactory.makeWebServiceException(msgCtx.getLocalException());
+ }
+ } finally {
+ // Free the incoming input stream
+ try {
+ msgCtx.freeInputStream();
+ } catch (IOException ioe) {
+ return ExceptionFactory.makeWebServiceException(ioe);
+ }
}
return null;
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/JAXBDispatchAsyncListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/JAXBDispatchAsyncListener.java?rev=683433&r1=683432&r2=683433&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/JAXBDispatchAsyncListener.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/JAXBDispatchAsyncListener.java Wed Aug 6 15:36:06 2008
@@ -19,6 +19,7 @@
package org.apache.axis2.jaxws.client.dispatch;
+import org.apache.axis2.jaxws.ExceptionFactory;
import org.apache.axis2.jaxws.client.async.AsyncResponse;
import org.apache.axis2.jaxws.core.MessageContext;
import org.apache.axis2.jaxws.description.EndpointDescription;
@@ -48,7 +49,17 @@
}
public Object getResponseValueObject(MessageContext mc) {
- return JAXBDispatch.getValue(mc.getMessage(), mode, jaxbContext);
+ try {
+ return JAXBDispatch.getValue(mc.getMessage(), mode, jaxbContext);
+ } finally {
+ // Free the incoming stream
+ try {
+ mc.freeInputStream();
+ }
+ catch (Throwable t) {
+ throw ExceptionFactory.makeWebServiceException(t);
+ }
+ }
}
public Throwable getFaultResponse(MessageContext mc) {
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/XMLDispatchAsyncListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/XMLDispatchAsyncListener.java?rev=683433&r1=683432&r2=683433&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/XMLDispatchAsyncListener.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/XMLDispatchAsyncListener.java Wed Aug 6 15:36:06 2008
@@ -19,6 +19,7 @@
package org.apache.axis2.jaxws.client.dispatch;
+import org.apache.axis2.jaxws.ExceptionFactory;
import org.apache.axis2.jaxws.client.async.AsyncResponse;
import org.apache.axis2.jaxws.core.MessageContext;
import org.apache.axis2.jaxws.description.EndpointDescription;
@@ -52,7 +53,17 @@
}
public Object getResponseValueObject(MessageContext mc) {
- return XMLDispatch.getValue(mc.getMessage(), mode, blockFactoryType);
+ try {
+ return XMLDispatch.getValue(mc.getMessage(), mode, blockFactoryType);
+ } finally {
+ // Free incoming stream
+ try {
+ mc.freeInputStream();
+ }
+ catch (Throwable t) {
+ throw ExceptionFactory.makeWebServiceException(t);
+ }
+ }
}
public Throwable getFaultResponse(MessageContext mc) {
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java?rev=683433&r1=683432&r2=683433&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java Wed Aug 6 15:36:06 2008
@@ -394,6 +394,13 @@
return object;
} finally {
responseMsg.close();
+ // Free incoming stream
+ try {
+ responseContext.freeInputStream();
+ }
+ catch (Throwable t) {
+ throw ExceptionFactory.makeWebServiceException(t);
+ }
}
}
@@ -405,23 +412,32 @@
//we will fetch the OperationDescription of the sync method and this should give us the
//correct fault description so we can throw the right user defined exception.
- if (opDesc.isJAXWSAsyncClientMethod()) {
- opDesc = opDesc.getSyncOperation();
- }
- if (msg != null && msg.isFault()) {
- ClassLoader cl = (ClassLoader) msgCtx.getProperty(Constants.CACHE_CLASSLOADER);
- Object object = MethodMarshallerFactory.getMarshaller(opDesc, true, cl)
- .demarshalFaultResponse(msg, opDesc);
- if (log.isDebugEnabled() && object != null) {
- log.debug("A fault was found and processed.");
- log.debug("Throwing a fault of type: " + object.getClass().getName() +
- " back to the clent.");
+ try {
+ if (opDesc.isJAXWSAsyncClientMethod()) {
+ opDesc = opDesc.getSyncOperation();
+ }
+ if (msg != null && msg.isFault()) {
+ ClassLoader cl = (ClassLoader) msgCtx.getProperty(Constants.CACHE_CLASSLOADER);
+ Object object = MethodMarshallerFactory.getMarshaller(opDesc, true, cl)
+ .demarshalFaultResponse(msg, opDesc);
+ if (log.isDebugEnabled() && object != null) {
+ log.debug("A fault was found and processed.");
+ log.debug("Throwing a fault of type: " + object.getClass().getName() +
+ " back to the clent.");
+ }
+
+ return (Throwable)object;
+ } else if (msgCtx.getLocalException() != null) {
+ // use the factory, it'll throw the right thing:
+ return ExceptionFactory.makeWebServiceException(msgCtx.getLocalException());
+ }
+ } finally {
+ try {
+ msgCtx.freeInputStream();
+ }
+ catch (Throwable t) {
+ throw ExceptionFactory.makeWebServiceException(t);
}
-
- return (Throwable)object;
- } else if (msgCtx.getLocalException() != null) {
- // use the factory, it'll throw the right thing:
- return ExceptionFactory.makeWebServiceException(msgCtx.getLocalException());
}
return null;
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java?rev=683433&r1=683432&r2=683433&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java Wed Aug 6 15:36:06 2008
@@ -19,18 +19,24 @@
package org.apache.axis2.jaxws.core;
+import org.apache.axiom.om.util.DetachableInputStream;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.OperationDescription;
import org.apache.axis2.jaxws.handler.MEPContext;
import org.apache.axis2.jaxws.message.Message;
import org.apache.axis2.jaxws.message.util.MessageUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.WebServiceException;
+
+import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -48,6 +54,8 @@
*/
public class MessageContext {
+ private static Log log = LogFactory.getLog(MessageContext.class);
+
private InvocationContext invocationCtx;
private org.apache.axis2.context.MessageContext axisMsgCtx;
private EndpointDescription endpointDesc;
@@ -313,4 +321,23 @@
this.isServer = isServer;
}
+ /**
+ * Free the resources associated with the incoming input stream. (i.e. HTTPInputStream)
+ * This allows the transport layer to free resources and pool connections
+ */
+ public void freeInputStream() throws IOException {
+
+
+ // During builder processing, the original input stream was wrapped with
+ // a detachable input stream. The detachable input stream's detach method
+ // causes the original stream to be consumed and closed.
+ DetachableInputStream is = (DetachableInputStream)
+ getProperty(Constants.DETACHABLE_INPUT_STREAM);
+ if (is != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Detaching inbound input stream " + is);
+ }
+ is.detach();
+ }
+ }
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/Reader.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/Reader.java?rev=683433&r1=683432&r2=683433&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/Reader.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/Reader.java Wed Aug 6 15:36:06 2008
@@ -258,7 +258,7 @@
}
public Object getProperty(String arg0) throws IllegalArgumentException {
- debug("Entering getProperty....");
+ debug("Entering getProperty for ..." + arg0);
Object o = reader.getProperty(arg0);
debug("reader.getProperty(arg0) = "+o);
return o;