svn commit: r549890 - in /activemq/camel/trunk/componen
|
|||
![]()
svn commit: r549890 - in /activemq/camel/trunk/componen
|
Author: jstrachan
Date: Fri Jun 22 10:26:41 2007 New Revision: 549890 URL: http://svn.apache.org/viewvc?view=rev&rev=549890 Log: added test case showing the use of a POST to a HTTP endpoint working, with the headers and body being available to the message Added: activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/ activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/http Removed: activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/ Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpExchange.java activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/CamelServlet.java Fri Jun 22 10:26:41 2007 @@ -47,7 +47,7 @@ } // Have the camel process the HTTP exchange. - HttpExchange exchange = new HttpExchange(consumer.getEndpoint().getContext(), request, response); + HttpExchange exchange = new HttpExchange(consumer.getEndpoint(), request, response); consumer.getProcessor().process(exchange); // HC: The getBinding() is interesting because it illustrates the impedance miss-match between Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpBinding.java Fri Jun 22 10:26:41 2007 @@ -17,6 +17,9 @@ */ package org.apache.camel.component.http; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + /** * @version $Revision$ */ @@ -27,5 +30,14 @@ */ public void writeResponse(HttpExchange exchange) { /** TODO */ + } + + /** + * Parses the body from a HTTP message + */ + public Object parseBody(HttpMessage httpMessage) throws IOException { + // lets assume the body is a reader + HttpServletRequest request = httpMessage.getRequest(); + return request.getReader(); } } Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java Fri Jun 22 10:26:41 2007 @@ -27,14 +27,12 @@ */ public class HttpComponent extends DefaultComponent<HttpExchange> { - CamelServlet camelServlet; + private CamelServlet camelServlet; /** * Connects the URL specified on the endpoint to the specified processor. * - * @param endpoint - * @param processor - * @throws Exception + * @throws Exception */ public void connect(HttpConsumer consumer) throws Exception { camelServlet.connect(consumer); @@ -43,9 +41,7 @@ /** * Disconnects the URL specified on the endpoint from the specified processor. * - * @param endpoint - * @param processor - * @throws Exception + * @throws Exception */ public void disconnect(HttpConsumer consumer) throws Exception { camelServlet.disconnect(consumer); Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpConsumer.java Fri Jun 22 10:26:41 2007 @@ -18,6 +18,7 @@ package org.apache.camel.component.http; import org.apache.camel.Processor; +import org.apache.camel.Endpoint; import org.apache.camel.impl.DefaultConsumer; /** @@ -31,8 +32,21 @@ super(endpoint, processor); this.endpoint = endpoint; } - - @Override + + @Override + public HttpEndpoint getEndpoint() { + return (HttpEndpoint) super.getEndpoint(); + } + + public HttpBinding getBinding() { + return endpoint.getBinding(); + } + + public String getPath() { + return endpoint.getPath(); + } + + @Override protected void doStart() throws Exception { super.doStart(); endpoint.connect(this); @@ -44,13 +58,4 @@ super.doStop(); } - public HttpBinding getBinding() { - return endpoint.getBinding(); - } - - public String getPath() { - return endpoint.getPath(); - } - - } Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java Fri Jun 22 10:26:41 2007 @@ -55,11 +55,11 @@ } public HttpExchange createExchange() { - return new HttpExchange(getContext()); + return new HttpExchange(this); } public HttpExchange createExchange(HttpServletRequest request, HttpServletResponse response) { - return new HttpExchange(getContext(), request, response); + return new HttpExchange(this, request, response); } public HttpBinding getBinding() { Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpExchange.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpExchange.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpExchange.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpExchange.java Fri Jun 22 10:26:41 2007 @@ -18,6 +18,7 @@ package org.apache.camel.component.http; import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; import org.apache.camel.impl.DefaultExchange; import javax.servlet.http.HttpServletRequest; @@ -30,20 +31,23 @@ * @version $Revision$ */ public class HttpExchange extends DefaultExchange { + private final HttpEndpoint endpoint; private HttpServletRequest request; private HttpServletResponse response; - public HttpExchange(CamelContext context) { - super(context); + public HttpExchange(HttpEndpoint endpoint) { + super(endpoint.getContext()); + this.endpoint = endpoint; } - public HttpExchange(CamelContext context, HttpServletRequest request, HttpServletResponse response) { - super(context); + public HttpExchange(HttpEndpoint endpoint, HttpServletRequest request, HttpServletResponse response) { + this(endpoint); this.request = request; this.response = response; - setIn(new HttpMessage(request)); + setIn(new HttpMessage(this, request)); } + /** * Returns the underlying Servlet request for inbound HTTP requests * @@ -60,5 +64,9 @@ */ public HttpServletResponse getResponse() { return response; + } + + public HttpEndpoint getEndpoint() { + return endpoint; } } Modified: activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java (original) +++ activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpMessage.java Fri Jun 22 10:26:41 2007 @@ -18,9 +18,13 @@ package org.apache.camel.component.http; import org.apache.camel.impl.DefaultMessage; +import org.apache.camel.Exchange; +import org.apache.camel.RuntimeCamelException; import javax.servlet.http.HttpServletRequest; import java.util.Map; +import java.util.Enumeration; +import java.io.IOException; /** * @version $Revision$ @@ -28,20 +32,41 @@ public class HttpMessage extends DefaultMessage { private HttpServletRequest request; - public HttpMessage() { - } - public HttpMessage(HttpServletRequest request) { + public HttpMessage(HttpExchange exchange, HttpServletRequest request) { + setExchange(exchange); this.request = request; + + // lets force a parse of the body + getBody(); + } + + @Override + public HttpExchange getExchange() { + return (HttpExchange) super.getExchange(); + } + + public HttpServletRequest getRequest() { + return request; } @Override protected Object createBody() { - return super.createBody(); /** TODO */ + try { + return getExchange().getEndpoint().getBinding().parseBody(this); + } + catch (IOException e) { + throw new RuntimeCamelException(e); + } } @Override - protected Map<String, Object> createHeaders() { - return super.createHeaders(); /** TODO */ + protected void populateInitialHeaders(Map<String, Object> map) { + Enumeration names = request.getHeaderNames(); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + Object value = request.getHeader(name); + map.put(name, value); + } } } Added: activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/http URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/http?view=auto&rev=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/http (added) +++ activemq/camel/trunk/components/camel-http/src/main/resources/META-INF/services/org/apache/camel/component/http Fri Jun 22 10:26:41 2007 @@ -0,0 +1,18 @@ +# +# 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. +# + +class=org.apache.camel.component.http.JettyHttpComponent Modified: activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java?view=diff&rev=549890&r1=549889&r2=549890 ============================================================================== --- activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java (original) +++ activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpRouteTest.java Fri Jun 22 10:26:41 2007 @@ -17,51 +17,85 @@ */ 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.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.Message; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.impl.DefaultCamelContext; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.URL; +import java.net.URLConnection; +import java.util.List; /** * @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 +public class HttpRouteTest extends ContextTestSupport { + protected String expectedBody = "<hello>world!</hello>"; + + public void testPojoRoutes() throws Exception { + MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:a", MockEndpoint.class); + mockEndpoint.expectedMessageCount(1); + + invokeHttpEndpoint(); + + mockEndpoint.assertIsSatisfied(); + List<Exchange> list = mockEndpoint.getReceivedExchanges(); + Exchange exchange = list.get(0); + assertNotNull("exchange", exchange); + + Message in = exchange.getIn(); + assertNotNull("in", in); - MockEndpoint mockA = (MockEndpoint) camelContext.getEndpoint("mock:a"); - mockA.expectedMessageCount(1); - - camelContext.start(); - - // START SNIPPET: invoke + String actualBody = in.getBody(String.class); + + log.info("Headers: " + in.getHeaders()); + log.info("Received body: " + actualBody); + + assertEquals("Body", expectedBody, actualBody); + } + + protected void invokeHttpEndpoint() throws IOException { 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(); + URLConnection urlConnection = url.openConnection(); + urlConnection.setDoInput(true); + urlConnection.setDoOutput(true); + urlConnection.setUseCaches(false); + urlConnection.setRequestProperty("Content-Type", "application/xml"); + + // Send POST data + OutputStream out = urlConnection.getOutputStream(); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); + writer.write(expectedBody); + writer.close(); + + // read the response data + BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + log.info("Read: " + line); + } + reader.close(); + +// InputStream is = url.openConnection().getInputStream(); +// System.out.println("Content: "+is); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + from("http://localhost:8080/test").to("mock:a"); + } + }; } } |
Free forum by Nabble | Edit this page |