Author: bimargulies
Date: Sat Dec 4 13:19:53 2010
New Revision: 1042167
URL: http://svn.apache.org/viewvc?rev=1042167&view=rev
Log:
Add a missing accessor for callers who prefer to call wait for themselves.
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ClientCallback.java
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ClientCallback.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ClientCallback.java?rev=1042167&r1=1042166&r2=1042167&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ClientCallback.java
(original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/ClientCallback.java Sat
Dec 4 13:19:53 2010
@@ -28,36 +28,45 @@ import java.util.concurrent.TimeoutExcep
import org.apache.cxf.message.Message;
/**
- *
+ * Asynchronous callback object for calls to {...@link
Client#invoke(ClientCallback, String, Object...)}
+ * and related functions.
+ *
+ * The default behavior of this expects the following pattern:
+ * <ol>
+ * <li>ClientCallback cb = new ClientCallback();</li>
+ * <li>client.invoke(cb, "someMethod", ....);</li>
+ * <li>cb.wait();</li>
+ * <li>// CXF calls notify on the callback object when the operation is
complete.</li>
+ * </ol>
*/
public class ClientCallback implements Future<Object[]> {
-
+
protected Map<String, Object> context;
protected Object[] result;
protected Throwable exception;
protected volatile boolean done;
protected boolean cancelled;
protected boolean started;
-
+
public ClientCallback() {
}
-
+
/**
- * Called when a message is first received prior to any actions
- * being applied to the message. The InterceptorChain is setup so
+ * Called when a message is first received prior to any actions
+ * being applied to the message. The InterceptorChain is setup so
* modifications to that can be done.
*/
public void start(Message msg) {
started = true;
}
-
+
/**
* If the processing of the incoming message proceeds normally, this
* method is called with the response context values and the resulting
objects.
- *
+ *
* The default behavior just stores the objects and calls notifyAll to wake
* up threads waiting for the response.
- *
+ *
* @param ctx
* @param res
*/
@@ -69,14 +78,14 @@ public class ClientCallback implements F
notifyAll();
}
}
-
+
/**
* If processing of the incoming message results in an exception, this
* method is called with the resulting exception.
- *
+ *
* The default behavior just stores the objects and calls notifyAll to wake
* up threads waiting for the response.
- *
+ *
* @param ctx
* @param ex
*/
@@ -88,8 +97,8 @@ public class ClientCallback implements F
notifyAll();
}
}
-
-
+
+
public boolean cancel(boolean mayInterruptIfRunning) {
if (!started) {
cancelled = true;
@@ -101,6 +110,12 @@ public class ClientCallback implements F
return false;
}
+ /**
+ * return the map of items returned from an operation.
+ * @return
+ * @throws InterruptedException if the operation was cancelled.
+ * @throws ExecutionException if the operation resulted in a fault.
+ */
public Map<String, Object> getResponseContext() throws
InterruptedException, ExecutionException {
synchronized (this) {
if (!done) {
@@ -115,7 +130,10 @@ public class ClientCallback implements F
}
return context;
}
-
+
+ /**
+ * {...@inheritdoc}
+ */
public Object[] get() throws InterruptedException, ExecutionException {
synchronized (this) {
if (!done) {
@@ -131,7 +149,10 @@ public class ClientCallback implements F
return result;
}
- public Object[] get(long timeout, TimeUnit unit)
+ /**
+ * {...@inheritdoc}
+ */
+ public Object[] get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException {
synchronized (this) {
if (!done) {
@@ -157,4 +178,12 @@ public class ClientCallback implements F
public boolean isDone() {
return done;
}
+
+ /*
+ * If the operation completes with a fault, the resulting exception object
ends up here.
+ */
+ public Throwable getException() {
+ return exception;
+ }
+
}