summaryrefslogtreecommitdiffstats
path: root/sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java')
-rw-r--r--sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java45
1 files changed, 21 insertions, 24 deletions
diff --git a/sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java b/sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
index 6758c1fc1f..3f68d5d219 100644
--- a/sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
+++ b/sandbox/sebastien/java/wrapped/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
@@ -39,12 +39,22 @@ import org.w3c.dom.Element;
class SampleWSDLInvoker extends InterceptorAsyncImpl {
final String name;
final Object instance;
- final Method method;
+ final Method doccall;
+ final Method rpccall;
+
+ static Method method(final Class<?> clazz, final String name, final Class<?>... types) {
+ try {
+ return clazz.getMethod("doccall", String.class, Element.class);
+ } catch (Exception e) {
+ return null;
+ }
+ }
SampleWSDLInvoker(final WSDLOperation op, final Class<?> clazz, final Object instance) throws SecurityException, NoSuchMethodException {
this.name = op.getName();
this.instance = instance;
- this.method = clazz.getMethod("call", String.class, Element.class);
+ this.doccall = method(clazz, "doccall", String.class, Element.class);
+ this.rpccall = method(clazz, "rpccall", String.class, Object[].class);
}
public Invoker getNext() {
@@ -56,31 +66,18 @@ class SampleWSDLInvoker extends InterceptorAsyncImpl {
return processRequest(msg);
}
- public void invokeAsyncRequest(Message msg) {
- // Retrieve the async callback information
- AsyncResponseInvoker respInvoker = (AsyncResponseInvoker)msg.getHeaders().get("ASYNC_RESPONSE_INVOKER");
- if( respInvoker == null ) throw new ServiceRuntimeException("Async Implementation invoked with no response invoker");
-
- Message responseMsg = processRequest(msg);
-
- // in this sample programming model we make the async
- // response from the implementation provider. The
- // component implementation itself doesn't get a chance to
- // do async responses.
-
- // At this point we could serialize the AsyncResponseInvoker and pick it up again
- // later to send the async response
-
- //((RuntimeEndpoint)msg.getTo()).invokeAsyncResponse(responseMsg);
- respInvoker.invokeAsyncResponse(responseMsg);
- } // end method invokeAsyncRequest
-
public Message processRequest(Message msg) {
try {
- //AsyncHeader asyncHeader = (String) message.getHeaders().get("ASYNC-HEADER");
// Invoke the generic call method
- Object response = method.invoke(instance, name, ((Object[])msg.getBody())[0]);
- msg.setBody(response);
+ if (doccall != null) {
+ // Document style (args wrapped in a single wrapper element)
+ final Object response = doccall.invoke(instance, name, ((Object[])msg.getBody())[0]);
+ msg.setBody(response);
+ } else {
+ // RPC style (args are passed as an array)
+ final Object response = rpccall.invoke(instance, name, (Object[])msg.getBody());
+ msg.setBody(response);
+ }
} catch(Exception e) {
e.printStackTrace();
msg.setFaultBody(e.getCause());