summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java')
-rw-r--r--sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java42
1 files changed, 37 insertions, 5 deletions
diff --git a/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java b/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
index a87c87dfb2..a9c2505ea8 100644
--- a/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
+++ b/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
@@ -19,13 +19,20 @@
package org.apache.tuscany.sca.binding.websocket.runtime;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.channels.SocketChannel;
+
import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
+import org.apache.websocket.WebSocket;
+import org.apache.websocket.WebSocketConnector;
public class WebsocketReferenceInvoker implements Invoker {
-
+
protected Operation operation;
protected EndpointReference endpoint;
@@ -36,16 +43,41 @@ public class WebsocketReferenceInvoker implements Invoker {
public Message invoke(Message msg) {
try {
-
return doInvoke(msg);
-
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public Message doInvoke(Message msg) {
- WebsocketServiceInvoker fi = WebsocketStash.getService(endpoint.getBinding().getURI());
- return fi.invokeService(msg);
+ String componentName = endpoint.getTargetEndpoint().getComponent().getName();
+ String serviceName = endpoint.getTargetEndpoint().getService().getName();
+ String operationName = operation.getName();
+ String uri = endpoint.getBinding().getURI() + "/" + componentName + "/" + serviceName + "/" + operationName;
+ String jsonParams = JSONUtil.encodeRequestParams((Object[]) msg.getBody());
+ String responseJSON = invokeWebSocketRequest(uri, jsonParams);
+ Class<?> returnType = operation.getOutputType().getLogical().get(0).getPhysical();
+ Object response = JSONUtil.decodeResponse(responseJSON, returnType);
+ msg.setBody(response);
+ return msg;
+ }
+
+ private String invokeWebSocketRequest(String uri, String jsonParams) {
+ try {
+ return doInvokeWebSocketRequest(uri, jsonParams);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private String doInvokeWebSocketRequest(String uri, String jsonParams) throws IOException, URISyntaxException {
+ WebSocketConnector connector = new WebSocketConnector();
+ WebSocket<SocketChannel> websocket = connector.connect(new URI(uri), null, "apache-tuscany", null);
+ websocket.sendText(jsonParams);
+ String jsonResponse = websocket.receiveText();
+ websocket.close();
+ return jsonResponse;
}
}