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 2009/05/08 10:29:05 UTC

svn commit: r772883 - in /camel/branches/camel-1.x/components/camel-jetty/src: main/java/org/apache/camel/component/jetty/ test/java/org/apache/camel/component/jetty/

Author: davsclaus
Date: Fri May  8 08:29:04 2009
New Revision: 772883

URL: http://svn.apache.org/viewvc?rev=772883&view=rev
Log:
CAMEL-1570: Added support for configuring handlers on Jetty, eg for security. Thanks to Christopher Hunt for the patch.

Added:
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java   (with props)
Modified:
    camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
    camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentBasedRouteTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamAsExchangeHeaderTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamTest.java
    camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettySteveIssueTest.java

Modified: camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Fri May  8 08:29:04 2009
@@ -26,20 +26,19 @@
 import org.apache.camel.component.http.HttpConsumer;
 import org.apache.camel.component.http.HttpEndpoint;
 import org.apache.camel.component.http.HttpExchange;
-import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.apache.commons.httpclient.params.HttpClientParams;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.Handler;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.ContextHandlerCollection;
 import org.mortbay.jetty.nio.SelectChannelConnector;
 import org.mortbay.jetty.security.SslSocketConnector;
 import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.HashSessionIdManager;
-import org.mortbay.jetty.servlet.HashSessionManager;
 import org.mortbay.jetty.servlet.ServletHolder;
 import org.mortbay.jetty.servlet.SessionHandler;
 
@@ -128,7 +127,7 @@
                 }
                 getServer().addConnector(connector);
 
-                connectorRef = new ConnectorRef(connector, createServletForConnector(connector));
+                connectorRef = new ConnectorRef(connector, createServletForConnector(connector, endpoint.getHandlers()));
                 connector.start();
                 
                 connectors.put(connectorKey, connectorRef);
@@ -242,12 +241,20 @@
         sslSocketConnector = connector;
     }
 
-    protected CamelServlet createServletForConnector(Connector connector) throws Exception {
+    protected CamelServlet createServletForConnector(Connector connector, String handlerNames) throws Exception {
         CamelServlet camelServlet = new CamelContinuationServlet();
         
         Context context = new Context(server, "/", Context.NO_SECURITY | Context.NO_SESSIONS);
         context.setConnectorNames(new String[] {connector.getName()});
 
+        if (handlerNames != null) {
+            String[] handlerNameArray = handlerNames.split(",");
+            for (String handlerName : handlerNameArray) {
+                Handler handler = getHandler(handlerName);
+                context.addHandler(handler);
+            }
+        }
+        
         ServletHolder holder = new ServletHolder();
         holder.setServlet(camelServlet);
         context.addServlet(holder, "/*");
@@ -285,4 +292,15 @@
         super.doStop();
     }
    
+    private Handler getHandler(String handlerName) {
+        Handler handler = null;
+        if (handlerName != null) {
+            handler = getCamelContext().getRegistry().lookup(handlerName, Handler.class);
+            ObjectHelper.notNull(handler, handlerName);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Using context handler: " + handlerName);
+            }
+        }
+        return handler;
+    }
 }

Modified: camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java Fri May  8 08:29:04 2009
@@ -37,7 +37,8 @@
 public class JettyHttpEndpoint extends HttpEndpoint {
     private JettyHttpComponent component;
     private boolean sessionSupport;
-
+    private String handlerNames;
+    
     public JettyHttpEndpoint(JettyHttpComponent component, String uri, URI httpURL, HttpClientParams clientParams,
                              HttpConnectionManager httpConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
         super(uri, component, httpURL, clientParams, httpConnectionManager, clientConfigurer);
@@ -72,4 +73,12 @@
         return sessionSupport;
     }
 
+    public String getHandlers() {
+        return handlerNames;
+    }
+
+    public void setHandlers(String handlerNames) {
+        this.handlerNames = handlerNames;
+    }
+
 }

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/ExplicitHttpsRouteTest.java Fri May  8 08:29:04 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.jetty;
 
+import java.net.URISyntaxException;
 import java.net.URL;
 
 import org.apache.camel.Exchange;
@@ -28,12 +29,12 @@
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
-            public void configure() {
+            public void configure() throws URISyntaxException {
                 SslSocketConnector sslSocketConnector = new SslSocketConnector();
                 sslSocketConnector.setKeyPassword(pwd);
                 sslSocketConnector.setPassword(pwd);
                 URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
-                sslSocketConnector.setKeystore(keyStoreUrl.getPath());
+                sslSocketConnector.setKeystore(keyStoreUrl.toURI().getPath());
                 sslSocketConnector.setTruststoreType("JKS");
                 
                 JettyHttpComponent componentJetty = (JettyHttpComponent) context.getComponent("jetty");

Added: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java?rev=772883&view=auto
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java (added)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java Fri May  8 08:29:04 2009
@@ -0,0 +1,94 @@
+/**
+ * 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.jetty;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.JndiRegistry;
+import org.mortbay.jetty.handler.StatisticsHandler;
+
+public class HandlerTest extends ContextTestSupport {
+    private StatisticsHandler statisticsHandler1 = new StatisticsHandler();
+    private StatisticsHandler statisticsHandler2 = new StatisticsHandler();
+    private StatisticsHandler statisticsHandler3 = new StatisticsHandler();
+
+    private String htmlResponse = "<html><body>Book 123 is Camel in Action</body></html>";
+
+    public void testHandler() throws Exception {
+        // First test the situation where one should invoke the handler once
+        assertEquals(0, statisticsHandler1.getRequests());
+        assertEquals(0, statisticsHandler2.getRequests());
+        assertEquals(0, statisticsHandler3.getRequests());
+        ByteArrayInputStream html = (ByteArrayInputStream) template
+                .requestBody("http://localhost:9080/", "");
+        BufferedReader br = new BufferedReader(new InputStreamReader(html));
+        assertEquals(htmlResponse, br.readLine());
+        assertEquals(1, statisticsHandler1.getRequests());
+        assertEquals(0, statisticsHandler2.getRequests());
+        assertEquals(0, statisticsHandler3.getRequests());
+
+        // Now test the situation where one should invoke the handler twice
+        assertEquals(1, statisticsHandler1.getRequests());
+        assertEquals(0, statisticsHandler2.getRequests());
+        assertEquals(0, statisticsHandler3.getRequests());
+        html = (ByteArrayInputStream) template.requestBody(
+                "http://localhost:9081/", "");
+        br = new BufferedReader(new InputStreamReader(html));
+        assertEquals(htmlResponse, br.readLine());
+        assertEquals(1, statisticsHandler1.getRequests());
+        assertEquals(1, statisticsHandler2.getRequests());
+        assertEquals(1, statisticsHandler3.getRequests());
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("statisticsHandler1", statisticsHandler1);
+        jndi.bind("statisticsHandler2", statisticsHandler2);
+        jndi.bind("statisticsHandler3", statisticsHandler3);
+        return jndi;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("jetty:http://localhost:9080/?handlers=statisticsHandler1")
+                        .process(new Processor() {
+                            public void process(Exchange exchange)
+                                throws Exception {
+                                exchange.getOut().setBody(htmlResponse);
+                            }
+                        });
+                from(
+                        "jetty:http://localhost:9081/?handlers=statisticsHandler2,statisticsHandler3")
+                        .process(new Processor() {
+                            public void process(Exchange exchange)
+                                throws Exception {
+                                exchange.getOut().setBody(htmlResponse);
+                            }
+                        });
+            };
+        };
+    }
+}

Propchange: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HandlerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java Fri May  8 08:29:04 2009
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.SocketException;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +47,7 @@
         // ensure jsse clients can validate the self signed dummy localhost cert, 
         // use the server keystore as the trust store for these tests
         URL trustStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
-        setSystemProp("javax.net.ssl.trustStore", trustStoreUrl.getPath());
+        setSystemProp("javax.net.ssl.trustStore", trustStoreUrl.toURI().getPath());
     }
 
     @Override
@@ -134,13 +135,13 @@
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
-            public void configure() {
+            public void configure() throws URISyntaxException {
                 
                 JettyHttpComponent componentJetty = (JettyHttpComponent) context.getComponent("jetty");
                 componentJetty.setSslPassword(pwd);
                 componentJetty.setSslKeyPassword(pwd);
                 URL keyStoreUrl = this.getClass().getClassLoader().getResource("jsse/localhost.ks");
-                componentJetty.setKeystore(keyStoreUrl.getPath());
+                componentJetty.setKeystore(keyStoreUrl.toURI().getPath());
                 
                 from("jetty:https://localhost:9080/test").to("mock:a");
 

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentBasedRouteTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentBasedRouteTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentBasedRouteTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyContentBasedRouteTest.java Fri May  8 08:29:04 2009
@@ -25,7 +25,7 @@
  */
 public class JettyContentBasedRouteTest extends ContextTestSupport {
 
-    private String serverUri = "http://localhost:5432/myservice";
+    private String serverUri = "http://localhost:9080/myservice";
 
     public void testSendOne() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:one");
@@ -61,4 +61,4 @@
         };
     }
 
-}
\ No newline at end of file
+}

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpEndpointDisconnectTest.java Fri May  8 08:29:04 2009
@@ -24,7 +24,7 @@
  */
 public class JettyHttpEndpointDisconnectTest extends ContextTestSupport {
 
-    private String serverUri = "http://localhost:5432/myservice";
+    private String serverUri = "http://localhost:9080/myservice";
 
     public void testContextShutdownRemovesHttpConnector() throws Exception {
         context.stop();

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamAsExchangeHeaderTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamAsExchangeHeaderTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamAsExchangeHeaderTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamAsExchangeHeaderTest.java Fri May  8 08:29:04 2009
@@ -27,7 +27,7 @@
  */
 public class JettyHttpGetWithParamAsExchangeHeaderTest extends ContextTestSupport {
 
-    private String serverUri = "http://localhost:5432/myservice";
+    private String serverUri = "http://localhost:9080/myservice";
 
     public void testHttpGetWithParamsViaURI() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
@@ -69,4 +69,4 @@
         };
     }
 
-}
\ No newline at end of file
+}

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyHttpGetWithParamTest.java Fri May  8 08:29:04 2009
@@ -30,7 +30,7 @@
  */
 public class JettyHttpGetWithParamTest extends ContextTestSupport {
 
-    private String serverUri = "http://localhost:5432/myservice";
+    private String serverUri = "http://localhost:9080/myservice";
     private MyParamsProcessor processor = new MyParamsProcessor();
 
     public void testHttpGetWithParamsViaURI() throws Exception {

Modified: camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettySteveIssueTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettySteveIssueTest.java?rev=772883&r1=772882&r2=772883&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettySteveIssueTest.java (original)
+++ camel/branches/camel-1.x/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettySteveIssueTest.java Fri May  8 08:29:04 2009
@@ -25,7 +25,7 @@
  */
 public class JettySteveIssueTest extends ContextTestSupport {
 
-    private String serverUri = "http://localhost:5432/myservice";
+    private String serverUri = "http://localhost:9080/myservice";
 
     public void testSendX() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");