[jbossws-commits] JBossWS SVN: r12929 - in stack/native/trunk/modules: core/src/main/java/org/jboss/ws/core/jaxws/spi and 1 other directories.
jbossws-commits at lists.jboss.org
jbossws-commits at lists.jboss.org
Wed Sep 8 05:56:24 EDT 2010
Author: darran.lofthouse at jboss.com
Date: 2010-09-08 05:56:23 -0400 (Wed, 08 Sep 2010)
New Revision: 12929
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientProxy.java
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/JBWS3071TestCase.java
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/TestEndpointImpl.java
Log:
[JBWS-3071] JAX-WS Asynchronous Exception handling.
Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientProxy.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientProxy.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ClientProxy.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -275,15 +275,15 @@
log.debug("Finished task " + getTaskID().toString() + ": " + result);
response.set(result);
-
- // Call the handler if available
- if (handler != null)
- handler.handleResponse(response);
}
catch (Exception ex)
{
handleAsynInvokeException(ex);
}
+
+ // Call the handler if available
+ if (handler != null)
+ handler.handleResponse(response);
}
// 2.3.4.5 Conformance (Asychronous fault cause): An ExecutionException that is thrown by the get method
Modified: stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -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/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
--- stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/core/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -101,8 +101,11 @@
// provide logging
private static final Logger log = Logger.getLogger(ServiceDelegateImpl.class);
+ // Lock to ensure only one thread can initialise the defaultExecutor.
+ private static final Object DEFAULT_EXECUTOR_LOCK = new Object();
// The executor service
- private static ExecutorService defaultExecutor = Executors.newCachedThreadPool();
+ private static ExecutorService defaultExecutor = null;
+
// The service meta data that is associated with this JAXWS Service
private ServiceMetaData serviceMetaData;
// The ServiceRefMetaData supplied by the ServiceObjectFactory
@@ -340,12 +343,32 @@
this.handlerResolver = handlerResolver;
}
+ private ExecutorService getDefaultExecutor()
+ {
+ if (defaultExecutor == null)
+ {
+ synchronized (DEFAULT_EXECUTOR_LOCK)
+ {
+ if (defaultExecutor == null)
+ {
+ defaultExecutor = Executors.newCachedThreadPool();
+ if (log.isTraceEnabled())
+ {
+ log.trace("Created new defaultExecutor", new Throwable("Call Trace"));
+ }
+ }
+ }
+ }
+
+ return defaultExecutor;
+ }
+
@Override
public Executor getExecutor()
{
if (executor == null)
{
- executor = defaultExecutor;
+ executor = getDefaultExecutor();
}
return executor;
}
Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/JBWS3071TestCase.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/JBWS3071TestCase.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/JBWS3071TestCase.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -130,4 +130,26 @@
}
}
+ public void testEchoFailAsyncFuture_isDone() throws Exception
+ {
+ StringHandler handler = new StringHandler();
+
+ Future future = port.echoAsync("FAIL SLEEP", handler);
+ while (future.isDone() == false)
+ {
+ Thread.sleep(200);
+ }
+
+ try
+ {
+ handler.getResponse().get();
+ fail("Expected 'ExecutionException' not thrown.");
+ }
+ catch (ExecutionException ee)
+ {
+ Exception cause = (Exception)ee.getCause();
+ assertEquals("Cause Type", TestException.class, cause.getClass());
+ }
+ }
+
}
Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -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,12 +34,27 @@
*/
public class StringHandler implements AsyncHandler<String>
{
+ private static final Logger log = Logger.getLogger(StringHandler.class);
private Response<String> response;
@Override
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;
}
Modified: stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/TestEndpointImpl.java
===================================================================
--- stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/TestEndpointImpl.java 2010-09-08 09:55:39 UTC (rev 12928)
+++ stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws3071/TestEndpointImpl.java 2010-09-08 09:56:23 UTC (rev 12929)
@@ -34,8 +34,20 @@
public String echo(String message) throws TestException
{
- if ("FAIL".equals(message))
+ if (message.contains("SLEEP"))
{
+ try
+ {
+ Thread.sleep(5000);
+ }
+ catch (InterruptedException e)
+ {
+ throw new RuntimeException("Unable to sleep", e);
+ }
+ }
+
+ if (message.contains("FAIL"))
+ {
throw new TestException(message);
}
More information about the jbossws-commits
mailing list