Author: chirino
Date: Mon May 14 08:28:54 2007
New Revision: 537879

URL: http://svn.apache.org/viewvc?view=rev&rev=537879
Log:
- Made DefaultComponent abstract so that base cases are forced to implment 
required methods.
- Implemented a Jetty Based http component so that you can consume on dynamic 
http endpoints.

Added:
    
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
    
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
    
activemq/camel/trunk/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ProducerTest.java
    
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
    
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
    
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
 Mon May 14 08:28:54 2007
@@ -53,7 +53,14 @@
 
     @Fluent
     public FromBuilder from( @FluentArg("uri") String uri) {
-        return from(endpoint(uri));
+       if( uri == null ) {
+               throw new IllegalArgumentException("uri parameter cannot be 
null");
+       }
+       Endpoint endpoint = endpoint(uri);
+       if( endpoint == null ) {
+               throw new IllegalArgumentException("uri '"+uri+"' could not be 
resolved.");
+       }
+        return from(endpoint);
     }
 
     @Fluent

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Mon May 14 08:28:54 2007
@@ -311,7 +311,8 @@
         if (routeList != null) {
             for (Route<Exchange> route : routeList) {
                 Processor processor = route.getProcessor();
-                Consumer<Exchange> consumer = 
route.getEndpoint().createConsumer(processor);
+                Endpoint<Exchange> endpoint = route.getEndpoint();
+                Consumer<Exchange> consumer = 
endpoint.createConsumer(processor);
                 if (consumer != null) {
                     consumer.start();
                     servicesToClose.add(consumer);

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
 Mon May 14 08:28:54 2007
@@ -34,7 +34,7 @@
 /**
  * @version $Revision$
  */
-public class DefaultComponent<E extends Exchange> extends ServiceSupport 
implements Component<E> {
+public abstract  class DefaultComponent<E extends Exchange> extends 
ServiceSupport implements Component<E> {
 
        private int defaultThreadPoolSize = 5;
     private CamelContext camelContext;
@@ -124,7 +124,5 @@
      * @param parameters the optional parameters passed in
      * @return a newly created endpoint or null if the endpoint cannot be 
created based on the inputs
      */
-    protected Endpoint<E> createEndpoint(String uri, String remaining, Map 
parameters) throws Exception {
-        return null;
-    }
+    abstract protected Endpoint<E> createEndpoint(String uri, String 
remaining, Map parameters) throws Exception;
 }

Modified: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ProducerTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ProducerTest.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ProducerTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ProducerTest.java
 Mon May 14 08:28:54 2007
@@ -17,14 +17,15 @@
  */
 package org.apache.camel.impl;
 
-import junit.framework.TestCase;
-import org.apache.camel.TestSupport;
-import org.apache.camel.Endpoint;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.Exchange;
-import org.apache.camel.CamelContext;
+import org.apache.camel.TestSupport;
 
 /**
  * @version $Revision: 1.1 $
@@ -33,7 +34,13 @@
     private CamelContext context = new DefaultCamelContext();
 
     public void testUsingADerivedExchange() throws Exception {
-        DefaultEndpoint<MyExchange> endpoint = new 
DefaultEndpoint<MyExchange>("foo", new DefaultComponent()) {
+        DefaultEndpoint<MyExchange> endpoint = new 
DefaultEndpoint<MyExchange>("foo", new DefaultComponent(){
+                       @Override
+                       protected Endpoint createEndpoint(String uri, String 
remaining, Map parameters) throws Exception {
+                               return null;
+                       }
+               
+        } ) {
             public Consumer<MyExchange> createConsumer(Processor processor) 
throws Exception {
                 return null;
             }
@@ -41,7 +48,7 @@
             public MyExchange createExchange() {
                 return new MyExchange(getContext());
             }
-
+ 
             public Producer<MyExchange> createProducer() throws Exception {
                 return null;
             }
@@ -49,6 +56,7 @@
             public boolean isSingleton() {
                 return false;
             }
+            
         };
 
         DefaultProducer producer = new DefaultProducer(endpoint) {

Modified: 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
 (original)
+++ 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java
 Mon May 14 08:28:54 2007
@@ -18,52 +18,60 @@
 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;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.camel.util.ProducerCache;
-
 /**
  * @version $Revision$
  */
 public class CamelServlet extends HttpServlet {
-    private HttpEndpoint endpoint;
-    private ProducerCache<HttpExchange> producerCache = new 
ProducerCache<HttpExchange>();
 
-    public CamelServlet() {
-    }
+    private ConcurrentHashMap<String, HttpConsumer> consumers=new 
ConcurrentHashMap<String, HttpConsumer>();
 
-    public CamelServlet(HttpEndpoint endpoint) {
-        this.endpoint = endpoint;
+       public CamelServlet() {
     }
 
     @Override
     protected void service(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-        HttpEndpoint endpoint = resolveEndpoint(request, response);
-        if (endpoint == null) {
-            throw new ServletException("No endpoint found for request: " + 
request.getRequestURI());
-        }
-
         try {
+                               
+               // Is there a consumer registered for the request.
+               HttpConsumer consumer = resolve(request);
+               if( consumer == null ) {
+                       response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                       return;
+               }
                
-                       HttpExchange exchange = 
endpoint.createExchange(request, response);
-                       producerCache.send(endpoint, exchange);
+               // Have the camel process the HTTP exchange.
+                       HttpExchange exchange =  new 
HttpExchange(consumer.getEndpoint().getContext(), request, response);           
           
+                       consumer.getProcessor().process(exchange);
 
-                       // HC: The getBinding() interesting because it 
illustrates the impedance miss-match between
+                       // HC: The getBinding() is interesting because it 
illustrates the impedance miss-match between
                        // HTTP's stream oriented protocol, and Camels more 
message oriented protocol exchanges.
 
                        // now lets output to the response
-                       endpoint.getBinding().writeResponse(exchange);
+                       consumer.getBinding().writeResponse(exchange);
                        
                } catch (Exception e) {
                        throw new ServletException(e);
                }
     }
 
-    protected HttpEndpoint resolveEndpoint(HttpServletRequest request, 
HttpServletResponse response) {
-        return endpoint;
-    }
+       protected HttpConsumer resolve(HttpServletRequest request) {
+               String path = request.getPathInfo();
+               return consumers.get(path);
+       }
+
+       public void connect(HttpConsumer consumer) {
+               consumers.put(consumer.getPath(), consumer);
+       }
+
+       public void disconnect(HttpConsumer consumer) {
+               consumers.remove(consumer.getPath());
+       }
+
 }

Modified: 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
 (original)
+++ 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
 Mon May 14 08:28:54 2007
@@ -17,10 +17,51 @@
  */
 package org.apache.camel.component.http;
 
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
 
 /**
  * @version $Revision$
  */
 public class HttpComponent extends DefaultComponent<HttpExchange> {
+       
+       CamelServlet camelServlet;
+       
+       /** 
+        * Connects the URL specified on the endpoint to the specified 
processor.
+        *  
+        * @param endpoint
+        * @param processor
+        * @throws Exception 
+        */
+       public void connect(HttpConsumer consumer) throws Exception {
+               camelServlet.connect(consumer);
+       }
+
+       /**
+        * Disconnects the URL specified on the endpoint from the specified 
processor.
+        * 
+        * @param endpoint
+        * @param processor
+        * @throws Exception 
+        */
+       public void disconnect(HttpConsumer consumer) throws Exception {
+               camelServlet.disconnect(consumer);
+       }
+
+       public CamelServlet getCamelServlet() {
+               return camelServlet;
+       }
+
+       public void setCamelServlet(CamelServlet camelServlet) {
+               this.camelServlet = camelServlet;
+       }
+
+       @Override
+       protected Endpoint<HttpExchange> createEndpoint(String uri, String 
remaining, Map parameters) throws Exception {
+               return new HttpEndpoint(uri, this);
+       }
+
 }

Added: 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java?view=auto&rev=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
 (added)
+++ 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java
 Mon May 14 08:28:54 2007
@@ -0,0 +1,56 @@
+/**
+ *
+ * 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.http;
+
+import org.apache.camel.Processor;
+import org.apache.camel.impl.DefaultConsumer;
+
+/**
+ * @version $Revision: 534063 $
+ */
+public class HttpConsumer extends DefaultConsumer<HttpExchange> {
+
+       private final HttpEndpoint endpoint;
+
+       public HttpConsumer(HttpEndpoint endpoint, Processor processor) {
+               super(endpoint, processor);
+               this.endpoint = endpoint;
+       }
+       
+       @Override
+       protected void doStart() throws Exception {
+               super.doStart();
+               endpoint.connect(this);         
+       }
+       
+       @Override
+       protected void doStop() throws Exception {
+               endpoint.disconnect(this);
+               super.doStop();
+       }
+
+       public HttpBinding getBinding() {
+               return endpoint.getBinding();
+       }
+
+       public String getPath() {
+               return endpoint.getPath();
+       }
+       
+       
+}

Modified: 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java?view=diff&rev=537879&r1=537878&r2=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
 (original)
+++ 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
 Mon May 14 08:28:54 2007
@@ -17,17 +17,18 @@
  */
 package org.apache.camel.component.http;
 
-import org.apache.camel.impl.DefaultEndpoint;
-import org.apache.camel.impl.DefaultProducer;
-import org.apache.camel.impl.DefaultConsumer;
-import org.apache.camel.Processor;
-import org.apache.camel.Producer;
-import org.apache.camel.Consumer;
-import org.apache.camel.Exchange;
+import java.net.URI;
+import java.net.URISyntaxException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.impl.DefaultEndpoint;
+
 /**
  * Represents a HTTP based Endpoint
  *
@@ -36,22 +37,21 @@
 public class HttpEndpoint extends DefaultEndpoint<HttpExchange> {
 
     private HttpBinding binding;
-
-    protected HttpEndpoint(String uri, HttpComponent component) {
+       private HttpComponent component;
+       private URI httpUri;
+       
+    protected HttpEndpoint(String uri, HttpComponent component) throws 
URISyntaxException {
         super(uri, component);
+               this.component = component;
+               this.httpUri = new URI(uri);
     }
 
     public Producer<HttpExchange> createProducer() throws Exception {
-        return new DefaultProducer(this) {
-            public void process(Exchange exchange) {
-                /** TODO */
-            }
-        };
+       throw new RuntimeCamelException("Not implemented.");
     }
 
     public Consumer<HttpExchange> createConsumer(Processor processor) throws 
Exception {
-        // TODO
-        return new DefaultConsumer<HttpExchange>(this, processor) {};
+        return new HttpConsumer(this, processor);
     }
 
     public HttpExchange createExchange() {
@@ -77,4 +77,30 @@
                return true;
        }
 
+       public void connect(HttpConsumer consumer) throws Exception {
+               component.connect(consumer);
+       }
+
+       public void disconnect(HttpConsumer consumer) throws Exception {
+               component.disconnect(consumer);
+       }
+
+       public String getPath() {
+               return httpUri.getPath();
+       }
+
+       public int getPort() {
+               if( httpUri.getPort() == -1 ) {
+                       if( "https".equals(getProtocol() ) ) {
+                               return 443;
+                       } else {
+                               return 80;
+                       }
+               }
+               return httpUri.getPort();
+       }
+
+       public String getProtocol() {
+               return httpUri.getScheme(); 
+       }
 }

Added: 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java?view=auto&rev=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
 (added)
+++ 
activemq/camel/trunk/camel-http/src/main/java/org/apache/camel/component/http/JettyHttpComponent.java
 Mon May 14 08:28:54 2007
@@ -0,0 +1,140 @@
+/**
+ *
+ * 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.http;
+
+import java.util.HashMap;
+
+import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.nio.SelectChannelConnector;
+import org.mortbay.jetty.security.SslSocketConnector;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.ServletHolder;
+
+/**
+ * An HttpComponent which starts an embedded Jetty for to handle consuming from
+ * http endpoints.
+ * 
+ * @version $Revision: 525142 $
+ */
+public class JettyHttpComponent extends HttpComponent {
+       
+       Server server;
+       
+       class ConnectorRef {
+               Connector connector;
+               int refCount = 0;
+               public ConnectorRef(Connector connector) {
+                       this.connector=connector;
+                       increment();
+               }
+               public int increment() {
+                       return ++refCount;
+               }
+               public int decrement() {
+                       return --refCount;
+               }
+       }
+       
+       final HashMap<String, ConnectorRef> connectors = new HashMap<String, 
ConnectorRef>();
+       
+       
+       
+       
+       @Override
+       protected void doStart() throws Exception {
+               server = createServer();
+               super.doStart();
+       }
+
+       private Server createServer() throws Exception {
+               setCamelServlet(new CamelServlet());
+               
+               Server server = new Server();
+               Context context = new 
Context(Context.NO_SECURITY|Context.NO_SESSIONS);
+                       
+               context.setContextPath("/");
+               ServletHolder holder = new ServletHolder();
+               holder.setServlet(getCamelServlet());
+               context.addServlet(holder, "/*");               
+               server.setHandler(context);
+                       
+               server.start();
+               return server;
+       }
+
+       @Override
+       protected void doStop() throws Exception {
+               for (ConnectorRef connectorRef : connectors.values()) {
+                       connectorRef.connector.stop();
+               }
+               connectors.clear();
+               
+               server.stop();
+               super.doStop();
+       }
+
+       @Override
+       public void connect(HttpConsumer consumer) throws Exception {
+               
+               // Make sure that there is a connector for the requested 
endpoint.
+               HttpEndpoint endpoint = (HttpEndpoint) consumer.getEndpoint();
+               String connectorKey = 
endpoint.getProtocol()+":"+endpoint.getPort();
+               
+               synchronized(connectors) {
+                       ConnectorRef connectorRef = 
connectors.get(connectorKey);
+                       if( connectorRef == null ) {
+                               Connector connector;
+                               if( "https".equals(endpoint.getProtocol()) ) {
+                                       connector = new SslSocketConnector();
+                               } else {
+                                       connector = new 
SelectChannelConnector();
+                               }
+                               connector.setPort(endpoint.getPort());
+                               server.addConnector(connector);
+                               connector.start();
+                               connectorRef = new ConnectorRef(connector);
+                       } else {
+                               // ref track the connector
+                               connectorRef.increment();
+                       }
+               }
+               
+               super.connect(consumer);
+       }
+       
+       @Override
+       public void disconnect(HttpConsumer consumer) throws Exception {
+               super.disconnect(consumer);
+               
+               // If the connector is not needed anymore.. then stop it.
+               HttpEndpoint endpoint = (HttpEndpoint) consumer.getEndpoint();
+               String connectorKey = 
endpoint.getProtocol()+":"+endpoint.getPort();
+               
+               synchronized(connectors) {
+                       ConnectorRef connectorRef = 
connectors.get(connectorKey);
+                       if( connectorRef != null ) {
+                               if( connectorRef.decrement() == 0 ) {
+                                       
server.removeConnector(connectorRef.connector);
+                                       connectorRef.connector.stop();
+                                       connectors.remove(connectorKey);
+                               }
+                       }
+               }
+       }
+}

Added: 
activemq/camel/trunk/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java?view=auto&rev=537879
==============================================================================
--- 
activemq/camel/trunk/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
 (added)
+++ 
activemq/camel/trunk/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java
 Mon May 14 08:28:54 2007
@@ -0,0 +1,67 @@
+/**
+ *
+ * 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.http;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+
+/**
+ * @version $Revision: 520220 $
+ */
+public class HttpRouteTest extends TestCase {
+       
+    public void testPojoRoutes() throws Exception {            
+        CamelContext camelContext = new DefaultCamelContext();
+        
+        // START SNIPPET: register
+        JettyHttpComponent component = new JettyHttpComponent();
+        camelContext.addComponent("http", component);
+        // END SNIPPET: register
+        
+        // START SNIPPET: route
+        // lets add simple route
+        camelContext.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("http://0.0.0.0:8080/test";).to("mock:a");
+            }
+        });
+        // END SNIPPET: route
+
+        MockEndpoint mockA = (MockEndpoint) camelContext.getEndpoint("mock:a");
+        mockA.expectedMessageCount(1);
+        
+        camelContext.start();
+        
+        // START SNIPPET: invoke
+        URL url = new URL("http://localhost:8080/test";);
+        InputStream is = url.openConnection().getInputStream();
+        System.out.println("Content: "+is);
+        // END SNIPPET: invoke
+        
+        mockA.assertIsSatisfied();
+        
+        camelContext.stop();
+    }
+}


Reply via email to