You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/12/05 14:33:44 UTC

[2/3] camel git commit: [CAMEL-9392] Add ability to pass parameters within websocket url and handle them in onOpen event

[CAMEL-9392] Add ability to pass parameters within websocket url and handle them in onOpen event


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1d762e51
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1d762e51
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1d762e51

Branch: refs/heads/master
Commit: 1d762e5114b0411a64f1b27352f72f57029fc018
Parents: 2d77c3a
Author: Pavlo Kletsko <pk...@gmail.com>
Authored: Sat Dec 5 13:32:51 2015 +0100
Committer: Pavlo Kletsko <pk...@gmail.com>
Committed: Sat Dec 5 13:32:51 2015 +0100

----------------------------------------------------------------------
 .../atmosphere/websocket/WebsocketConsumer.java | 20 +++++++++++++
 .../WebsocketRouteWithInitParamTest.java        | 31 ++++++++++++++++++++
 2 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1d762e51/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConsumer.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConsumer.java
index b8267ac..86bd016 100644
--- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConsumer.java
+++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConsumer.java
@@ -17,6 +17,8 @@
 package org.apache.camel.component.atmosphere.websocket;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -37,6 +39,7 @@ import org.atmosphere.websocket.WebSocketProtocol;
 public class WebsocketConsumer extends ServletConsumer {
     private AtmosphereFramework framework;
     private boolean enableEventsResending;
+    private Map<String, String> queryMap = new HashMap<>();
 
     public WebsocketConsumer(WebsocketEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
@@ -63,6 +66,7 @@ public class WebsocketConsumer extends ServletConsumer {
     
     void service(HttpServletRequest request, HttpServletResponse response, boolean enableEventsResending) throws IOException, ServletException {
         this.enableEventsResending = enableEventsResending;
+        this.queryMap = getQueryMap(request.getQueryString());
         framework.doCometSupport(AtmosphereRequestImpl.wrap(request), AtmosphereResponseImpl.wrap(response));
     }
 
@@ -90,6 +94,10 @@ public class WebsocketConsumer extends ServletConsumer {
         exchange.getIn().setHeader(WebsocketConstants.CONNECTION_KEY, connectionKey);
         exchange.getIn().setHeader(WebsocketConstants.EVENT_TYPE, eventType);
 
+        for (Map.Entry<String, String> param : queryMap.entrySet()) {
+            exchange.getIn().setHeader(param.getKey(), param.getValue());
+        }
+
         // send exchange using the async routing engine
         getAsyncProcessor().process(exchange, new AsyncCallback() {
             public void done(boolean doneSync) {
@@ -103,4 +111,16 @@ public class WebsocketConsumer extends ServletConsumer {
     public boolean isEnableEventsResending() {
         return enableEventsResending;
     }
+
+    private Map<String, String> getQueryMap(String query) {
+        Map<String, String> map = new HashMap<>();
+        if (query != null) {
+            String[] params = query.split("&");
+            for (String param : params) {
+                String[] nameval = param.split("=");
+                map.put(nameval[0], nameval[1]);
+            }
+        }
+        return map;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/1d762e51/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
----------------------------------------------------------------------
diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
index 13e3e77..f0f8182 100644
--- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
+++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
@@ -30,6 +30,13 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni
         wsclient.close();
     }
 
+    @Test
+    public void testPassParametersWebsocketOnOpen() throws Exception {
+        TestClient wsclient = new TestClient("ws://localhost:" + PORT + "/hola1?param1=value1&param2=value2");
+        wsclient.connect();
+        wsclient.close();
+    }
+
     // START SNIPPET: payload
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
@@ -40,6 +47,13 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni
                         checkEventsResendingEnabled(exchange);
                     }
                 });
+
+                // route for events resending enabled with parameters from url
+                from("atmosphere-websocket:///hola1").to("log:info").process(new Processor() {
+                    public void process(final Exchange exchange) throws Exception {
+                        checkPassedParameters(exchange);
+                    }
+                });
             }
         };
     }
@@ -56,5 +70,22 @@ public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithIni
             assertTrue(eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE) || eventType.equals(WebsocketConstants.ONCLOSE_EVENT_TYPE) || eventType.equals(WebsocketConstants.ONERROR_EVENT_TYPE));
         }
     }
+
+    private static void checkPassedParameters(Exchange exchange) {
+        Object connectionKey = exchange.getIn().getHeader(WebsocketConstants.CONNECTION_KEY);
+        Object eventType = exchange.getIn().getHeader(WebsocketConstants.EVENT_TYPE);
+        Object msg = exchange.getIn().getBody();
+
+        assertEquals(null, msg);
+        assertTrue(connectionKey != null);
+
+        if ((eventType instanceof Integer) && eventType.equals(WebsocketConstants.ONOPEN_EVENT_TYPE)) {
+
+            String param1 = (String)exchange.getIn().getHeader("param1");
+            String param2 = (String)exchange.getIn().getHeader("param2");
+
+            assertTrue(param1.equals("value1") && param2.equals("value2"));
+        }
+    }
     // END SNIPPET: payload
 }