You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/02/08 06:56:07 UTC

git commit: CAMEL-7150 Provides options to setup the parameter on the WebSocketServlet

Updated Branches:
  refs/heads/master 8d361e604 -> dd9f9df3d


CAMEL-7150 Provides options to setup the parameter on the WebSocketServlet


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

Branch: refs/heads/master
Commit: dd9f9df3d46ec8e507cae28ba48e5b04d4a33fa8
Parents: 8d361e6
Author: Willem Jiang <wi...@gmail.com>
Authored: Sat Feb 8 13:55:40 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Sat Feb 8 13:55:40 2014 +0800

----------------------------------------------------------------------
 .../component/websocket/WebsocketComponent.java | 21 +++++++
 .../component/websocket/WebsocketEndpoint.java  | 47 +++++++++++++++
 .../WebscoketEndpointConfigurationTest.java     | 62 ++++++++++++++++++++
 3 files changed, 130 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dd9f9df3/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
index 4aa74b8..3998172 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketComponent.java
@@ -55,6 +55,7 @@ import org.eclipse.jetty.servlets.CrossOriginFilter;
 import org.eclipse.jetty.util.resource.Resource;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
 import org.eclipse.jetty.util.thread.ThreadPool;
+import org.eclipse.jetty.websocket.WebSocketFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -157,6 +158,8 @@ public class WebsocketComponent extends DefaultComponent {
 
                 // Create ServletContextHandler
                 ServletContextHandler context = createContext(server, connector, endpoint.getHandlers());
+                // setup the WebSocketComponentServlet initial parameters 
+                setWebSocketComponentServletInitialParameter(context, endpoint);
                 server.setHandler(context);
 
                 // Apply CORS (http://www.w3.org/TR/cors/)
@@ -300,6 +303,24 @@ public class WebsocketComponent extends DefaultComponent {
         setProperties(endpoint, parameters);
         return endpoint;
     }
+    
+    protected void setWebSocketComponentServletInitialParameter(ServletContextHandler context, WebsocketEndpoint endpoint) {
+        if (endpoint.getBufferSize() != null) {
+            context.setInitParameter("bufferSize", endpoint.getBufferSize().toString());
+        }
+        if (endpoint.getMaxIdleTime() != null) {
+            context.setInitParameter("maxIdleTime", endpoint.getMaxIdleTime().toString());
+        }
+        if (endpoint.getMaxTextMessageSize() != null) {
+            context.setInitParameter("maxTextMessageSize", endpoint.getMaxTextMessageSize().toString());
+        }
+        if (endpoint.getMaxBinaryMessageSize() != null) {
+            context.setInitParameter("maxBinaryMessageSize", endpoint.getMaxBinaryMessageSize().toString());
+        }
+        if (endpoint.getMinVersion() != null) {
+            context.setInitParameter("minVersion", endpoint.getMinVersion().toString());
+        }
+    }
 
     protected Server createServer() throws Exception {
         Server server = new Server();

http://git-wip-us.apache.org/repos/asf/camel/blob/dd9f9df3/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketEndpoint.java b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketEndpoint.java
index 9c4226e..d32a0a3 100644
--- a/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketEndpoint.java
+++ b/components/camel-websocket/src/main/java/org/apache/camel/component/websocket/WebsocketEndpoint.java
@@ -54,6 +54,13 @@ public class WebsocketEndpoint extends DefaultEndpoint {
     private String staticResources;
 
     private Integer port;
+    // Here are the configuration on the WebSocketComponentServlet
+    private Integer bufferSize;
+    private Integer maxIdleTime;
+    private Integer maxTextMessageSize;
+    private Integer maxBinaryMessageSize;
+    private Integer minVersion;
+    
 
     public WebsocketEndpoint(WebsocketComponent component, String uri, String remaining, Map<String, Object> parameters) {
         super(uri, component);
@@ -164,6 +171,46 @@ public class WebsocketEndpoint extends DefaultEndpoint {
         return sessionSupport;
     }
 
+    public Integer getBufferSize() {
+        return bufferSize;
+    }
+
+    public void setBufferSize(Integer bufferSize) {
+        this.bufferSize = bufferSize;
+    }
+
+    public Integer getMaxIdleTime() {
+        return maxIdleTime;
+    }
+
+    public void setMaxIdleTime(Integer maxIdleTime) {
+        this.maxIdleTime = maxIdleTime;
+    }
+
+    public Integer getMaxTextMessageSize() {
+        return maxTextMessageSize;
+    }
+
+    public void setMaxTextMessageSize(Integer maxTextMessageSize) {
+        this.maxTextMessageSize = maxTextMessageSize;
+    }
+
+    public Integer getMaxBinaryMessageSize() {
+        return maxBinaryMessageSize;
+    }
+
+    public void setMaxBinaryMessageSize(Integer maxBinaryMessageSize) {
+        this.maxBinaryMessageSize = maxBinaryMessageSize;
+    }
+
+    public Integer getMinVersion() {
+        return minVersion;
+    }
+
+    public void setMinVersion(Integer minVersion) {
+        this.minVersion = minVersion;
+    }
+
     public List<Handler> getHandlers() {
         return handlers;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/dd9f9df3/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebscoketEndpointConfigurationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebscoketEndpointConfigurationTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebscoketEndpointConfigurationTest.java
new file mode 100644
index 0000000..b74848f
--- /dev/null
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebscoketEndpointConfigurationTest.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.websocket;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.component.websocket.WebsocketComponent.ConnectorRef;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.junit.Test;
+import org.mockito.Mock;
+
+public class WebscoketEndpointConfigurationTest extends CamelTestSupport {
+    
+    private int port;
+    
+    @Mock
+    private Processor processor;
+
+    @Override
+    public void setUp() throws Exception {
+        port = AvailablePortFinder.getNextAvailable(16330);
+        super.setUp();
+    }
+    
+    @Test
+    public void testSetServletInitalparameters() throws Exception {
+        String uri = "websocket://localhost:" + port + "/bar?bufferSize=65000&maxIdleTime=3000";
+        WebsocketEndpoint websocketEndpoint = (WebsocketEndpoint)context.getEndpoint(uri);
+        WebsocketComponent component = websocketEndpoint.getComponent();
+        Consumer consumer = websocketEndpoint.createConsumer(processor);
+        component.connect((WebsocketProducerConsumer) consumer);
+        
+        assertNotNull(consumer);
+        assertEquals(WebsocketConsumer.class, consumer.getClass());
+        
+        // just check the servlet initial parameters
+        ConnectorRef conector = component.getConnectors().values().iterator().next();
+        
+        ServletContextHandler context = (ServletContextHandler)conector.server.getHandler();
+        String buffersize = context.getInitParameter("bufferSize");
+        assertEquals("Get a wrong buffersize", "65000", buffersize);
+        String maxIdleTime = context.getInitParameter("maxIdleTime");
+        assertEquals("Get a worng maxIdleTime", "3000", maxIdleTime);
+    }
+
+}