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 2011/03/02 11:17:29 UTC

svn commit: r1076163 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-servlet/ camel-servlet/src/main/java/org/apache/camel/component/servlet/ camel-servlet/src/main/java/org/apache/camel/component/servlet/o...

Author: davsclaus
Date: Wed Mar  2 10:17:28 2011
New Revision: 1076163

URL: http://svn.apache.org/viewvc?rev=1076163&view=rev
Log:
CAMEL-3549: camel-servlet is not agnostic to how CamelContext is started in web apps. For example you can startup using 100% spring style using a listener.

Added:
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultCamelServletService.java
Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
    camel/trunk/components/camel-servlet/pom.xml
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelServletService.java
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java
    camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java
    camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteSpringTest.java
    camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
    camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/MultiServletConsumerTest.java
    camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
    camel/trunk/components/camel-servlet/src/test/resources/log4j.properties
    camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/multiServletWeb.xml
    camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web-spring.xml
    camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web.xml

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java Wed Mar  2 10:17:28 2011
@@ -18,7 +18,6 @@ package org.apache.camel.component.http;
 
 import java.io.IOException;
 import java.util.concurrent.ConcurrentHashMap;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -50,12 +49,14 @@ public class CamelServlet extends HttpSe
         // Is there a consumer registered for the request.
         HttpConsumer consumer = resolve(request);
         if (consumer == null) {
+            log.debug("No consumer to service request {}", request);
             response.sendError(HttpServletResponse.SC_NOT_FOUND);
             return;
         }
 
         // are we suspended?
         if (consumer.isSuspended()) {
+            log.debug("Consumer suspended, cannot service request {}", request);
             response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
             return;
         }
@@ -117,10 +118,12 @@ public class CamelServlet extends HttpSe
     }
 
     public void connect(HttpConsumer consumer) {
+        log.debug("Connecting consumer: {}", consumer);
         consumers.put(consumer.getPath(), consumer);
     }
 
     public void disconnect(HttpConsumer consumer) {
+        log.debug("Disconnecting consumer: {}", consumer);
         consumers.remove(consumer.getPath());
     }
     

Modified: camel/trunk/components/camel-servlet/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/pom.xml?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/pom.xml (original)
+++ camel/trunk/components/camel-servlet/pom.xml Wed Mar  2 10:17:28 2011
@@ -42,6 +42,7 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-core</artifactId>
     </dependency>
+    <!-- TODO: Get tid of spring dependency -->
     <dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-spring</artifactId>
@@ -88,6 +89,11 @@
       <artifactId>httpunit</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-web</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   
   <build>

Modified: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java (original)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java Wed Mar  2 10:17:28 2011
@@ -16,59 +16,64 @@
  */
 package org.apache.camel.component.servlet;
 
-import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 
 import org.apache.camel.component.http.CamelServlet;
+import org.apache.camel.component.http.HttpConsumer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class CamelHttpTransportServlet extends CamelServlet implements CamelServletService {
+/**
+ * Camel HTTP servlet which can be used in Camel routes to route servlet invocations in routes.
+ */
+public class CamelHttpTransportServlet extends CamelServlet {
     private static final transient Logger LOG = LoggerFactory.getLogger(CamelHttpTransportServlet.class);
-    private static final Map<String, CamelServlet> CAMEL_SERVLET_MAP = new ConcurrentHashMap<String, CamelServlet>();
+    private static final Map<String, CamelServletService> CAMEL_SERVLET_MAP = new ConcurrentHashMap<String, CamelServletService>();
     private String servletName;
-    private AbstractApplicationContext applicationContext;
-    
+
     public void init(ServletConfig config) throws ServletException {
         super.init(config);
-        servletName = config.getServletName();
-        // parser the servlet init parameters
-        CAMEL_SERVLET_MAP.put(servletName, this);
-        String contextConfigLocation = config.getInitParameter("contextConfigLocation");
-        if (contextConfigLocation != null) {
-            //Create a spring application context for it
-            applicationContext = new ClassPathXmlApplicationContext(contextConfigLocation.split(","));
-            LOG.info("Started the application context rightly");
+        this.servletName = config.getServletName();
+        // do we already know this servlet?
+        CamelServletService service = CAMEL_SERVLET_MAP.get(servletName);
+
+        // we cannot control the startup ordering, sometimes the Camel routes start first
+        // other times the servlet, so we need to cater for both situations
+
+        if (service == null) {
+            // no we don't so create a new early service with this servlet
+            service = new DefaultCamelServletService(servletName, this);
+            CAMEL_SERVLET_MAP.put(servletName, service);
+        } else {
+            // use this servlet
+            service.setCamelServlet(this);
+            // and start the existing consumers we already have registered
+            for (HttpConsumer consumer : service.getConsumers()) {
+                connect(consumer);
+            }
         }
+        LOG.info("Initialized CamelHttpTransportServlet[" + servletName + "]");
     }
     
-    public void destroy() {        
-        if (applicationContext != null) {
-            applicationContext.stop();
-        }
-        // Need to remove the servlet from map after 
-        // the ApplicationContext is removed
+    public void destroy() {
         CAMEL_SERVLET_MAP.remove(servletName);
+        LOG.info("Destroyed CamelHttpTransportServlet[" + servletName + "]");
     }
     
-    public static CamelServlet getCamelServlet(String servletName) {
-        CamelServlet answer = null;
-        if (servletName != null) {
-            answer = CAMEL_SERVLET_MAP.get(servletName);
+    public static synchronized CamelServletService getCamelServletService(String servletName, HttpConsumer consumer) {
+        // we cannot control the startup ordering, sometimes the Camel routes start first
+        // other times the servlet, so we need to cater for both situations
+
+        CamelServletService answer = CAMEL_SERVLET_MAP.get(servletName);
+        if (answer == null) {
+            answer = new DefaultCamelServletService(servletName, consumer);
+            CAMEL_SERVLET_MAP.put(servletName, answer);
         } else {
-            if (CAMEL_SERVLET_MAP.size() > 0) {
-                // return the first one servlet
-                Iterator<CamelServlet> iterator = CAMEL_SERVLET_MAP.values().iterator();
-                answer = iterator.next();
-                LOG.info("Since no servlet name is specified, using the first element of camelServlet map [" + answer.getServletName() + "]");
-            }
-        }        
+            answer.addConsumer(consumer);
+        }
         return answer;
     }
 
@@ -76,8 +81,6 @@ public class CamelHttpTransportServlet e
     public String getServletName() {
         return servletName;
     }
-    
-    
-    
+
 }
 

Modified: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelServletService.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelServletService.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelServletService.java (original)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelServletService.java Wed Mar  2 10:17:28 2011
@@ -16,12 +16,56 @@
  */
 package org.apache.camel.component.servlet;
 
+import java.util.Set;
+
+import org.apache.camel.component.http.CamelServlet;
 import org.apache.camel.component.http.HttpConsumer;
 
+/**
+ * Service which binds {@link CamelServlet} to the consumers it should service.
+ */
 public interface CamelServletService {
-    
-    void connect(HttpConsumer consumer); 
 
+    /**
+     * Adds the given consumer to this service.
+     *
+     * @param consumer the consumer
+     */
+    void addConsumer(HttpConsumer consumer);
+
+    /**
+     * Gets the known consumers this service services.
+     *
+     * @return the consumers.
+     */
+    Set<HttpConsumer> getConsumers();
+
+    /**
+     * Sets the servlet to use.
+     *
+     * @param camelServlet the servlet to use.
+     */
+    void setCamelServlet(CamelServlet camelServlet);
+
+    /**
+     * Connect the given consumer to the servlet.
+     *
+     * @param consumer the consumer
+     */
+    void connect(HttpConsumer consumer);
+
+    /**
+     * Disconnects the given consumer from the servlet.
+     *
+     * @param consumer the consumer
+     */
     void disconnect(HttpConsumer consumer);
 
+    /**
+     * Gets the name of the servlet used.
+     *
+     * @return the name of the servlet used.
+     */
+    String getServletName();
+
 }

Added: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultCamelServletService.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultCamelServletService.java?rev=1076163&view=auto
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultCamelServletService.java (added)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultCamelServletService.java Wed Mar  2 10:17:28 2011
@@ -0,0 +1,77 @@
+/**
+ * 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.servlet;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.camel.component.http.CamelServlet;
+import org.apache.camel.component.http.HttpConsumer;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Default {@link CamelServletService}
+ */
+public class DefaultCamelServletService implements CamelServletService {
+
+    private final String servletName;
+    private final Set<HttpConsumer> consumers = new HashSet<HttpConsumer>();
+    private CamelServlet camelServlet;
+
+    public DefaultCamelServletService(String servletName, HttpConsumer consumer) {
+        ObjectHelper.notEmpty(servletName, "ServletName");
+        ObjectHelper.notNull(consumer, "HttpConsumer");
+        this.servletName = servletName;
+        addConsumer(consumer);
+    }
+
+    public DefaultCamelServletService(String servletName, CamelServlet camelServlet) {
+        ObjectHelper.notEmpty(servletName, "ServletName");
+        ObjectHelper.notNull(camelServlet, "CamelServlet");
+        this.servletName = servletName;
+        this.camelServlet = camelServlet;
+    }
+
+    public String getServletName() {
+        return servletName;
+    }
+
+    public void addConsumer(HttpConsumer consumer) {
+        consumers.add(consumer);
+    }
+
+    public void setCamelServlet(CamelServlet camelServlet) {
+        this.camelServlet = camelServlet;
+    }
+
+    public void connect(HttpConsumer consumer) {
+        if (camelServlet != null) {
+            camelServlet.connect(consumer);
+        }
+    }
+
+    public void disconnect(HttpConsumer consumer) {
+        if (camelServlet != null) {
+            camelServlet.disconnect(consumer);
+        }
+    }
+
+    public Set<HttpConsumer> getConsumers() {
+        return Collections.unmodifiableSet(consumers);
+    }
+}

Modified: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java (original)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletComponent.java Wed Mar  2 10:17:28 2011
@@ -23,7 +23,6 @@ import java.util.Set;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.http.AuthMethod;
-import org.apache.camel.component.http.CamelServlet;
 import org.apache.camel.component.http.HttpBinding;
 import org.apache.camel.component.http.HttpClientConfigurer;
 import org.apache.camel.component.http.HttpComponent;
@@ -37,35 +36,29 @@ import org.apache.commons.httpclient.Htt
 import org.apache.commons.httpclient.params.HttpClientParams;
 
 public class ServletComponent extends HttpComponent {
-    
-    private CamelServlet camelServlet;
-    
-    private CamelServletService camelServletService;
-        
-    public void setCamelServlet(CamelServlet servlet) {
-        camelServlet = servlet;
+
+    private String servletName = "CamelServlet";
+
+    public String getServletName() {
+        return servletName;
     }
-    
-    public void setCamelServletService(CamelServletService service) {
-        camelServletService = service;
+
+    public void setServletName(String servletName) {
+        this.servletName = servletName;
     }
 
-    public CamelServlet getCamelServlet(String servletName) {
-        CamelServlet answer;
-        if (camelServlet == null) {
-            answer = CamelHttpTransportServlet.getCamelServlet(servletName);
-        } else {
-            answer = camelServlet;
-        }
-        if (answer == null) {
-            throw new IllegalArgumentException("Cannot find the deployed servlet, please configure the ServletComponent"
-                + " or configure a org.apache.camel.component.servlet.CamelHttpTransportServlet servlet in web.xml ");
+    /**
+     * Strategy to get the {@link CamelServletService} for the given endpoint.
+     *
+     * @param endpoint  the http endpoint.
+     * @return the service
+     */
+    public CamelServletService getCamelServletService(ServletEndpoint endpoint, HttpConsumer consumer) {
+        CamelServletService service = CamelHttpTransportServlet.getCamelServletService(endpoint.getServletName(), consumer);
+        if (service == null) {
+            throw new IllegalArgumentException("Servlet: " + getServletName() + " not found.");
         }
-        return answer;
-    }
-    
-    public CamelServletService getCamelServletService() {
-        return camelServletService;
+        return service;
     }
     
     @Override
@@ -85,12 +78,13 @@ public class ServletComponent extends Ht
         Boolean bridgeEndpoint = getAndRemoveParameter(parameters, "bridgeEndpoint", Boolean.class);
         HttpBinding binding = resolveAndRemoveReferenceParameter(parameters, "httpBindingRef", HttpBinding.class);
         Boolean matchOnUriPrefix = getAndRemoveParameter(parameters, "matchOnUriPrefix", Boolean.class);
+        String servletName = getAndRemoveParameter(parameters, "servletName", String.class, getServletName());
 
         // restructure uri to be based on the parameters left as we dont want to include the Camel internal options
         URI httpUri = URISupport.createRemainingURI(new URI(UnsafeUriCharactersEncoder.encode(uri)), CastUtils.cast(parameters));
         uri = httpUri.toString();
 
-        ServletEndpoint endpoint = createServletEndpoint(uri, this, httpUri, params, getHttpConnectionManager(), configurer);
+        ServletEndpoint endpoint = createServletEndpoint(servletName, uri, this, httpUri, params, getHttpConnectionManager(), configurer);
         setEndpointHeaderFilterStrategy(endpoint);
 
         // prefer to use endpoint configured over component configured
@@ -120,34 +114,28 @@ public class ServletComponent extends Ht
         return endpoint;
     }
 
-    protected ServletEndpoint createServletEndpoint(String endpointUri,
+    /**
+     * Strategy to create the servlet endpoint.
+     */
+    protected ServletEndpoint createServletEndpoint(String servletName, String endpointUri,
             ServletComponent component, URI httpUri, HttpClientParams params,
             HttpConnectionManager httpConnectionManager,
             HttpClientConfigurer clientConfigurer) throws Exception {
-        return new ServletEndpoint(endpointUri, component, httpUri, params,
-                httpConnectionManager, clientConfigurer);
+        return new ServletEndpoint(servletName, endpointUri, component, httpUri, params, httpConnectionManager, clientConfigurer);
     }
     
     public void connect(HttpConsumer consumer) throws Exception {
-        if (getCamelServletService() != null) {
-            getCamelServletService().connect(consumer);
-        } else {
-            ServletEndpoint endpoint = (ServletEndpoint) consumer.getEndpoint();
-            CamelServlet servlet = getCamelServlet(endpoint.getServletName());
-            ObjectHelper.notNull(servlet, "CamelServlet");
-            servlet.connect(consumer);
-        }
+        ServletEndpoint endpoint = (ServletEndpoint) consumer.getEndpoint();
+        CamelServletService servlet = getCamelServletService(endpoint, consumer);
+        ObjectHelper.notNull(servlet, "CamelServlet");
+        servlet.connect(consumer);
     }
 
     public void disconnect(HttpConsumer consumer) throws Exception {
-        if (getCamelServletService() != null) {
-            getCamelServletService().disconnect(consumer);
-        } else {
-            ServletEndpoint endpoint = (ServletEndpoint) consumer.getEndpoint();
-            CamelServlet servlet = getCamelServlet(endpoint.getServletName());
-            ObjectHelper.notNull(servlet, "CamelServlet");
-            servlet.disconnect(consumer);
-        }
+        ServletEndpoint endpoint = (ServletEndpoint) consumer.getEndpoint();
+        CamelServletService servlet = getCamelServletService(endpoint, consumer);
+        ObjectHelper.notNull(servlet, "CamelServlet");
+        servlet.disconnect(consumer);
     }
 
 }
\ No newline at end of file

Modified: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java (original)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/ServletEndpoint.java Wed Mar  2 10:17:28 2011
@@ -29,25 +29,27 @@ import org.apache.commons.httpclient.Htt
 import org.apache.commons.httpclient.params.HttpClientParams;
 
 public class ServletEndpoint extends HttpEndpoint {
+
     private String servletName;
-    
+
     public ServletEndpoint() {
         super();
     }
-    
-    public ServletEndpoint(String endPointURI, ServletComponent component, URI httpUri, HttpClientParams params,
+
+    public ServletEndpoint(String servletName, String endPointURI, ServletComponent component, URI httpUri, HttpClientParams params,
                            HttpConnectionManager httpConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
         super(endPointURI, component, httpUri, params, httpConnectionManager, clientConfigurer);
+        this.servletName = servletName;
     }
     
     public void setServletName(String name) {
         servletName = name;
     }
-    
+
     public String getServletName() {
         return servletName;
     }
-    
+
     @Override
     public Producer createProducer() throws Exception {
         return super.createProducer();

Modified: camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java (original)
+++ camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java Wed Mar  2 10:17:28 2011
@@ -18,11 +18,8 @@ package org.apache.camel.component.servl
 
 import java.util.Dictionary;
 import java.util.Hashtable;
-
-import javax.servlet.Servlet;
 import javax.servlet.http.HttpServlet;
 
-import org.apache.camel.component.servlet.CamelHttpTransportServlet;
 import org.osgi.service.http.HttpContext;
 import org.osgi.service.http.HttpService;
 import org.springframework.beans.factory.InitializingBean;
@@ -34,6 +31,9 @@ import org.springframework.context.Lifec
  * HttpService</a>
  */
 public class OsgiServletRegisterer implements Lifecycle, InitializingBean {
+
+    // TODO: There must be a better way than depend on spring for registering a servlet into OSGi!
+
     /**
      * The alias is the name in the URI namespace of the Http Service at which the registration will be mapped
      * An alias must begin with slash ('/') and must not end with slash ('/'), with the exception that an alias 

Modified: camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteSpringTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteSpringTest.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteSpringTest.java (original)
+++ camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteSpringTest.java Wed Mar  2 10:17:28 2011
@@ -19,6 +19,7 @@ package org.apache.camel.component.servl
 import org.junit.Before;
 
 public class HttpClientRouteSpringTest extends HttpClientRouteTest {
+
     @Before
     public void setUp() throws Exception {
         startCamelContext = false;

Modified: camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java (original)
+++ camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java Wed Mar  2 10:17:28 2011
@@ -17,7 +17,6 @@
 package org.apache.camel.component.servlet;
 
 import java.io.ByteArrayInputStream;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -25,11 +24,9 @@ import com.meterware.httpunit.PostMethod
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class HttpClientRouteTest extends ServletCamelRouterTestSupport {

Modified: camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/MultiServletConsumerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/MultiServletConsumerTest.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/MultiServletConsumerTest.java (original)
+++ camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/MultiServletConsumerTest.java Wed Mar  2 10:17:28 2011
@@ -21,73 +21,55 @@ import com.meterware.httpunit.HttpNotFou
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.http.CamelServlet;
 import org.junit.Test;
 
 public class MultiServletConsumerTest extends ServletCamelRouterTestSupport {
-    /**
-     * @return The web.xml to use for testing.
-     */
+
     protected String getConfiguration() {
         return "/org/apache/camel/component/servlet/multiServletWeb.xml";
     }
-    
-    protected void loadServlets() throws Exception {
+
+    @Test
+    public void testMultiServletsConsumers() throws Exception {
+        String result = getService("/services1/hello?name=Camel");
+        assertEquals("Hello Camel", result);
+
+        result = getService("/services2/echo?name=Camel");
+        assertEquals("Camel Camel", result);
+    }
+
+    @Test
+    public void testMultiServletsConsumersCannotAccessEachOther() throws Exception {
         try {
-            sr.newClient().getResponse(CONTEXT_URL + "/services1");
+            getService("/services2/hello?name=Camel");
+            fail("Should have thrown an exception");
         } catch (HttpNotFoundException e) {
-            // ignore, we just want to boot up the servlet
+            assertEquals(404, e.getResponseCode());
         }
-        
+
         try {
-            sr.newClient().getResponse(CONTEXT_URL + "/services2");
+            getService("/services1/echo?name=Camel");
+            fail("Should have thrown an exception");
         } catch (HttpNotFoundException e) {
-            // ignore, we just want to boot up the servlet
+            assertEquals(404, e.getResponseCode());
         }
     }
-    
-    @Test
-    public void testMultiServletsConsumers() throws Exception {
-        // this bit is needed because the default servlet chosen (when none is specified)
-        // differs in various JDK versions
-        CamelServlet camelServlet = CamelHttpTransportServlet.getCamelServlet(null);
-        String helloServiceServlet = camelServlet.getServletName().contains("2") ? "2" : "1";
-        
-        String result = getService("/services" + helloServiceServlet + "/hello");
-        assertEquals("Get a wrong response", "/mycontext/services" + helloServiceServlet + "/hello", result);
-        
-        result = getService("/services1/echo");
-        assertEquals("Get a wrong response", "/mycontext/services1/echo", result);
-        
-        result = getService("/services2/echo");
-        assertEquals("Get a wrong response", "/mycontext/services2/echo", result);
-    }
-    
+
     public String getService(String path) throws Exception {
         WebRequest req = new GetMethodWebRequest(CONTEXT_URL + path);
         ServletUnitClient client = newClient();
         WebResponse response = client.getResponse(req);
-        
+
         return response.getText();
     }
-    
+
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
-            Processor echoRequestURIProcessor = new Processor() {
-                public void process(Exchange exchange) throws Exception {
-                    String uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
-                    exchange.getOut().setBody(uri);
-                }
-            };
-            
             public void configure() {
-                errorHandler(noErrorHandler());
-                from("servlet:///hello").process(echoRequestURIProcessor);
-                from("servlet:///echo?servletName=CamelServlet1").process(echoRequestURIProcessor);
-                from("servlet:///echo?servletName=CamelServlet2").process(echoRequestURIProcessor);
+                from("servlet:/hello?servletName=CamelServlet1").transform(simple("Hello ${header.name}"));
+
+                from("servlet:/echo?servletName=CamelServlet2").transform(simple("${header.name} ${header.name}"));
             }
         };
     }

Modified: camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java (original)
+++ camel/trunk/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java Wed Mar  2 10:17:28 2011
@@ -17,7 +17,7 @@
 package org.apache.camel.component.servlet;
 
 import java.io.InputStream;
-import com.meterware.httpunit.HttpNotFoundException;
+
 import com.meterware.httpunit.HttpUnitOptions;
 import com.meterware.servletunit.ServletRunner;
 import com.meterware.servletunit.ServletUnitClient;
@@ -37,8 +37,6 @@ public class ServletCamelRouterTestSuppo
         assertNotNull("The configuration input stream should not be null", is);
         sr = new ServletRunner(is, CONTEXT);
         
-        loadServlets();
-        
         HttpUnitOptions.setExceptionsThrownOnErrorStatus(true);
         if (startCamelContext) {        
             super.setUp();
@@ -53,14 +51,6 @@ public class ServletCamelRouterTestSuppo
         sr.shutDown();
     }
     
-    protected void loadServlets() throws Exception {
-        try {
-            sr.newClient().getResponse(CONTEXT_URL + "/services");
-        } catch (HttpNotFoundException e) {
-            // ignore, we just want to boot up the servlet
-        } 
-    }
-
     /**
      * @return The web.xml to use for testing.
      */
@@ -72,5 +62,4 @@ public class ServletCamelRouterTestSuppo
         return sr.newClient();
     }
 
-
 }

Modified: camel/trunk/components/camel-servlet/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/resources/log4j.properties?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/resources/log4j.properties (original)
+++ camel/trunk/components/camel-servlet/src/test/resources/log4j.properties Wed Mar  2 10:17:28 2011
@@ -21,6 +21,7 @@
 log4j.rootLogger=INFO, file
 
 #log4j.logger.org.apache.camel=DEBUG
+#log4j.logger.org.apache.camel.component.http.CamelServlet=DEBUG
 
 # CONSOLE appender not used by default
 log4j.appender.out=org.apache.log4j.ConsoleAppender

Modified: camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/multiServletWeb.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/multiServletWeb.xml?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/multiServletWeb.xml (original)
+++ camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/multiServletWeb.xml Wed Mar  2 10:17:28 2011
@@ -28,17 +28,13 @@
   <servlet>
     <servlet-name>CamelServlet1</servlet-name>
     <display-name>Camel Http Transport Servlet1</display-name>
-    <servlet-class>
-        org.apache.camel.component.servlet.CamelHttpTransportServlet
-    </servlet-class>
+    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
   </servlet>
   
   <servlet>
     <servlet-name>CamelServlet2</servlet-name>
     <display-name>Camel Http Transport Servlet2</display-name>
-    <servlet-class>
-        org.apache.camel.component.servlet.CamelHttpTransportServlet
-    </servlet-class>
+    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
   </servlet>
 
   <servlet-mapping>
@@ -51,5 +47,4 @@
     <url-pattern>/services2/*</url-pattern>
   </servlet-mapping>
 
-
 </web-app>
\ No newline at end of file

Modified: camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web-spring.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web-spring.xml?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web-spring.xml (original)
+++ camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web-spring.xml Wed Mar  2 10:17:28 2011
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 
 <!DOCTYPE web-app
-    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-    "http://java.sun.com/dtd/web-app_2_3.dtd">
-    
+        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+        "http://java.sun.com/dtd/web-app_2_3.dtd">
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements. See the NOTICE file
@@ -22,33 +22,36 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<!-- START SNIPPET: web -->    
+<!-- START SNIPPET: web -->
 <web-app>
 
-  <servlet>
-    <servlet-name>CamelServlet</servlet-name>
-    <display-name>Camel Http Transport Servlet</display-name>
-    <servlet-class>
-        org.apache.camel.component.servlet.CamelHttpTransportServlet
-    </servlet-class>
-    <init-param> 
-      <param-name>matchOnUriPrefix</param-name> 
-      <param-value>true</param-value>
-    </init-param>
-    <!-- Set the camel context application file location here. 
-         From Camel 2.3.0, you can specify more than one application context configure file 
-         which is separated by ','.
-    -->
-    <init-param>
-      <param-name>contextConfigLocation</param-name>
-	  <param-value>/org/apache/camel/component/servlet/camelContext.xml</param-value>
-    </init-param>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>CamelServlet</servlet-name>
-    <url-pattern>/services/*</url-pattern>
-  </servlet-mapping>
-  
+    <!-- tell Spring where it should load the XML file -->
+    <context-param>
+        <param-name>contextConfigLocation</param-name>
+        <param-value>classpath:org/apache/camel/component/servlet/camelContext.xml</param-value>
+    </context-param>
+
+    <!-- spring context listener which loads the XML file -->
+    <listener>
+        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+    </listener>
+
+    <!-- Camel Servlet -->
+    <servlet>
+        <servlet-name>CamelServlet</servlet-name>
+        <display-name>Camel Http Transport Servlet</display-name>
+        <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
+        <init-param>
+            <param-name>matchOnUriPrefix</param-name>
+            <param-value>true</param-value>
+        </init-param>
+    </servlet>
+
+    <!-- Camel Servlet mappings -->
+    <servlet-mapping>
+        <servlet-name>CamelServlet</servlet-name>
+        <url-pattern>/services/*</url-pattern>
+    </servlet-mapping>
+
 </web-app>
 <!-- END SNIPPET: web -->
\ No newline at end of file

Modified: camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web.xml?rev=1076163&r1=1076162&r2=1076163&view=diff
==============================================================================
--- camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web.xml (original)
+++ camel/trunk/components/camel-servlet/src/test/resources/org/apache/camel/component/servlet/web.xml Wed Mar  2 10:17:28 2011
@@ -28,10 +28,7 @@
   <servlet>
     <servlet-name>CamelServlet</servlet-name>
     <display-name>Camel Http Transport Servlet</display-name>
-    <servlet-class>
-        org.apache.camel.component.servlet.CamelHttpTransportServlet
-    </servlet-class>
-    
+    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
   </servlet>
 
   <servlet-mapping>