[jbossws-commits] JBossWS SVN: r12933 - in stack/native/branches/jbossws-native-2.0.1.SP2_CP/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 07:31:57 EDT 2010
Author: darran.lofthouse at jboss.com
Date: 2010-09-08 07:31:56 -0400 (Wed, 08 Sep 2010)
New Revision: 12933
Modified:
stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
Log:
[JBPAPP-4515] JAX-WS Asynchronous Client Exception issues.
Modified: stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/client/ResponseImpl.java 2010-09-08 11:31:56 UTC (rev 12933)
@@ -47,7 +47,6 @@
private Exception exception;
private Map<String, Object> context = new HashMap<String, Object>();
-
public void setException(Exception ex)
{
this.exception = ex;
@@ -69,16 +68,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)
@@ -95,7 +94,7 @@
{
this.result = result;
}
-
+
public boolean cancel(boolean mayInterruptIfRunning)
{
return getFutureInternal().cancel(mayInterruptIfRunning);
@@ -103,24 +102,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-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/main/java/org/jboss/ws/core/jaxws/spi/ServiceDelegateImpl.java 2010-09-08 11:31:56 UTC (rev 12933)
@@ -89,8 +89,11 @@
// provide logging
private 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
@@ -363,12 +366,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/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java
===================================================================
--- stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-09-08 10:45:47 UTC (rev 12932)
+++ stack/native/branches/jbossws-native-2.0.1.SP2_CP/src/test/java/org/jboss/test/ws/jaxws/jbws3071/StringHandler.java 2010-09-08 11:31:56 UTC (rev 12933)
@@ -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;
}
More information about the jbossws-commits
mailing list