Author: darran.lofthouse(a)jboss.com
Date: 2010-07-20 12:45:32 -0400 (Tue, 20 Jul 2010)
New Revision: 12666
Modified:
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
Log:
[JBPAPP-4610] Removed deadlock where handler accesses Response as it is set.
Modified:
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-07-20
12:11:27 UTC (rev 12665)
+++
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-07-20
16:45:32 UTC (rev 12666)
@@ -45,7 +45,6 @@
private Exception exception;
private Map<String, Object> context = new HashMap<String, Object>();
-
public void setException(Exception ex)
{
this.exception = ex;
@@ -67,16 +66,16 @@
throw new WebServiceException(exception);
}
}
-
+
return delegate;
}
-
+
private Future getFutureInternal()
{
if (delegate == null)
- throw new IllegalStateException("Future not available");
-
- return delegate;
+ throw new IllegalStateException("Future not available");
+
+ return delegate;
}
public void setFuture(Future delegate)
@@ -93,7 +92,7 @@
{
this.result = result;
}
-
+
public boolean cancel(boolean mayInterruptIfRunning)
{
return getFutureInternal().cancel(mayInterruptIfRunning);
@@ -101,24 +100,34 @@
public Object get() throws InterruptedException, ExecutionException
{
- if (result == null)
+ Object response = getResult();
+ if (response != null)
{
- getFutureInternal().get();
+ return response;
}
-
- if (exception != null)
- throw new ExecutionException(exception);
- return result;
+ getFutureInternal().get();
+ response = getResult();
+
+ return response;
}
public Object get(long timeout, TimeUnit unit) throws InterruptedException,
ExecutionException, TimeoutException
{
- if (result == null)
+ Object response = getResult();
+ if (response != null)
{
- getFutureInternal().get(timeout, unit);
+ return response;
}
+ getFutureInternal().get(timeout, unit);
+ response = getResult();
+
+ return response;
+ }
+
+ private Object getResult() throws ExecutionException
+ {
if (exception != null)
throw new ExecutionException(exception);
Modified:
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
===================================================================
---
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-07-20
12:11:27 UTC (rev 12665)
+++
stack/native/branches/jbossws-native-3.1.2.SP3-patch-02_JBPAPP-4610/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-07-20
16:45:32 UTC (rev 12666)
@@ -21,6 +21,10 @@
*/
package org.jboss.test.ws.jaxws.jbws3071;
+import java.util.concurrent.ExecutionException;
+
+import org.jboss.logging.Logger;
+
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Response;
@@ -30,11 +34,26 @@
*/
public class StringHandler implements AsyncHandler<String>
{
+ private static final Logger log = Logger.getLogger(StringHandler.class);
private Response<String> response;
-
+
public void handleResponse(Response<String> res)
{
+ try
+ {
+ Object response = res.get();
+ log.debug("Obtained Response - " + response.toString());
+ }
+ catch (InterruptedException e)
+ {
+ log.debug("Caught InterruptedException", e);
+ }
+ catch (ExecutionException e)
+ {
+ log.debug("Caught ExecutionException", e);
+
+ }
this.response = res;
}
Show replies by date