diff options
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.java | 45 |
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()); |