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¶m2=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
}