Author: alessio.soldano(a)jboss.com
Date: 2009-09-10 12:49:44 -0400 (Thu, 10 Sep 2009)
New Revision: 10676
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/NettyClient.java
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/WSResponseHandler.java
Log:
[JBWS-2753] Performing unmarshalling in the same thread that makes the call
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/NettyClient.java
===================================================================
---
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/NettyClient.java 2009-09-10
16:45:39 UTC (rev 10675)
+++
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/NettyClient.java 2009-09-10
16:49:44 UTC (rev 10676)
@@ -22,6 +22,7 @@
package org.jboss.ws.core.client.transport;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
@@ -137,7 +138,7 @@
WSResponseHandler responseHandler = null;
if (waitForResponse)
{
- responseHandler = new WSResponseHandler(unmarshaller);
+ responseHandler = new WSResponseHandler();
NettyHelper.setResponseHandler(channel, responseHandler);
}
@@ -173,12 +174,10 @@
//Get the response
Future<Result> futureResult = responseHandler.getFutureResult();
Result result = timeout == null ? futureResult.get() : futureResult.get(timeout,
TimeUnit.MILLISECONDS);
- if (result.getError() != null)
- {
- throw result.getError();
- }
- resMessage = result.getResponseMessage();
resHeaders = result.getResponseHeaders();
+ InputStream is = result.getResponse();
+ resMessage = unmarshaller.read(is, resHeaders);
+
//Update props with response headers (required to maintain session using
cookies)
callProps.clear();
if (resHeaders != null)
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/WSResponseHandler.java
===================================================================
---
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/WSResponseHandler.java 2009-09-10
16:45:39 UTC (rev 10675)
+++
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/client/transport/WSResponseHandler.java 2009-09-10
16:49:44 UTC (rev 10676)
@@ -21,6 +21,7 @@
*/
package org.jboss.ws.core.client.transport;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@@ -36,13 +37,10 @@
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.jboss.netty.handler.codec.http.HttpResponse;
-import org.jboss.ws.core.client.UnMarshaller;
-import org.jboss.ws.core.utils.ThreadLocalAssociation;
-import org.jboss.wsf.common.DOMUtils;
/**
* A Netty channel upstream handler that receives MessageEvent
- * and extract the JBossWS message using the provided unmarshaller.
+ * and sends data back to the NettyClient.
*
* @author alessio.soldano(a)jboss.com
* @since 24-Jun-2009
@@ -51,13 +49,11 @@
@ChannelPipelineCoverage("one")
public class WSResponseHandler extends SimpleChannelUpstreamHandler
{
- private UnMarshaller unmarshaller;
private FutureResult future;
- public WSResponseHandler(UnMarshaller unmarshaller)
+ public WSResponseHandler()
{
super();
- this.unmarshaller = unmarshaller;
this.future = new FutureResult();
}
@@ -85,16 +81,10 @@
}
ChannelBuffer content = response.getContent();
- result.setResponseMessage(unmarshaller.read(content.readable() ? new
ChannelBufferInputStream(content) : null, responseHeaders));
+ result.setResponse(content.readable() ? new ChannelBufferInputStream(content) :
null);
}
- catch (Throwable t)
- {
- result.setError(t);
- }
finally
{
- DOMUtils.clearThreadLocals();
- ThreadLocalAssociation.clear();
future.done();
}
}
@@ -223,26 +213,23 @@
public interface Result
{
- public Object getResponseMessage();
+ public InputStream getResponse();
public Map<String, Object> getResponseHeaders();
-
- public Throwable getError();
}
private class ResultImpl implements Result
{
- private Object responseMessage;
+ private InputStream is;
private Map<String, Object> responseHeaders = new HashMap<String,
Object>();
- private Throwable error;
- public Object getResponseMessage()
+ public InputStream getResponse()
{
- return responseMessage;
+ return is;
}
- public void setResponseMessage(Object responseMessage)
+ public void setResponse(InputStream is)
{
- this.responseMessage = responseMessage;
+ this.is = is;
}
public Map<String, Object> getResponseHeaders()
{
@@ -252,13 +239,5 @@
{
this.responseHeaders = responseHeaders;
}
- public Throwable getError()
- {
- return error;
- }
- public void setError(Throwable error)
- {
- this.error = error;
- }
}
}
\ No newline at end of file
Show replies by date