You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2011/10/09 09:34:42 UTC

svn commit: r1180557 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-http/src/main/java/org/apache/camel/component/http/helper/ camel-http4/src/main/java/org/apache/camel/component/http4/ camel-http4/src/ma...

Author: ningjiang
Date: Sun Oct  9 07:34:42 2011
New Revision: 1180557

URL: http://svn.apache.org/viewvc?rev=1180557&view=rev
Log:
CAMEL-4526 HttpProduder should not ignore the query part of HTTP_URI header

Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
    camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
    camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java
    camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java
    camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java Sun Oct  9 07:34:42 2011
@@ -22,6 +22,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -318,11 +320,13 @@ public class HttpProducer extends Defaul
      * @param exchange the exchange
      * @return the created method as either GET or POST
      * @throws CamelExchangeException is thrown if error creating RequestEntity
+     * @throws URISyntaxException 
      */
     @SuppressWarnings("deprecation")
-    protected HttpMethod createMethod(Exchange exchange) throws CamelExchangeException {
+    protected HttpMethod createMethod(Exchange exchange) throws CamelExchangeException, URISyntaxException {
 
         String url = HttpHelper.createURL(exchange, getEndpoint());
+        URI uri = new URI(url);
 
         RequestEntity requestEntity = createRequestEntity(exchange);
         HttpMethods methodToUse = HttpHelper.createMethod(exchange, getEndpoint(), requestEntity != null);
@@ -333,6 +337,10 @@ public class HttpProducer extends Defaul
         if (queryString == null) {
             queryString = getEndpoint().getHttpUri().getRawQuery();
         }
+        // We should user the query string from the HTTP_URI header
+        if (queryString == null) {
+            queryString = uri.getQuery();
+        }
         if (queryString != null) {
             // need to make sure the queryString is URI safe
             method.setQueryString(queryString);

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java Sun Oct  9 07:34:42 2011
@@ -22,6 +22,7 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -214,14 +215,28 @@ public final class HttpHelper {
      *
      * @param exchange  the exchange
      * @return the created method
+     * @throws URISyntaxException 
      */
-    public static HttpMethods createMethod(Exchange exchange, HttpEndpoint endpoint, boolean hasPayload) {
+    public static HttpMethods createMethod(Exchange exchange, HttpEndpoint endpoint, boolean hasPayload) throws URISyntaxException {
         // is a query string provided in the endpoint URI or in a header (header
         // overrules endpoint)
         String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // We need also check the HTTP_URI header query part
+        String uriString = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
+        // resolve placeholders in uriString
+        try {
+            uriString = exchange.getContext().resolvePropertyPlaceholders(uriString);
+        } catch (Exception e) {
+            throw new RuntimeExchangeException("Cannot resolve property placeholders with uri: " + uriString, exchange, e);
+        }
+        if (uriString != null) {
+            URI uri = new URI(uriString);
+            queryString = uri.getQuery();
+        }
         if (queryString == null) {
             queryString = endpoint.getHttpUri().getQuery();
         }
+        
 
         // compute what method to use either GET or POST
         HttpMethods answer;

Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java Sun Oct  9 07:34:42 2011
@@ -329,6 +329,11 @@ public class HttpProducer extends Defaul
 
         // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
         String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // We should user the query string from the HTTP_URI header
+        if (queryString == null) {
+            queryString = uri.getQuery();
+        }
+        
         if (queryString == null) {
             queryString = getEndpoint().getHttpUri().getRawQuery();
         }

Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpHelper.java Sun Oct  9 07:34:42 2011
@@ -22,6 +22,7 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -216,11 +217,24 @@ public final class HttpHelper {
      *
      * @param exchange the exchange
      * @return the created method
+     * @throws URISyntaxException 
      */
-    public static HttpMethods createMethod(Exchange exchange, HttpEndpoint endpoint, boolean hasPayload) {
+    public static HttpMethods createMethod(Exchange exchange, HttpEndpoint endpoint, boolean hasPayload) throws URISyntaxException {
         // is a query string provided in the endpoint URI or in a header (header
         // overrules endpoint)
         String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        // We need also check the HTTP_URI header query part
+        String uriString = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
+        // resolve placeholders in uriString
+        try {
+            uriString = exchange.getContext().resolvePropertyPlaceholders(uriString);
+        } catch (Exception e) {
+            throw new RuntimeExchangeException("Cannot resolve property placeholders with uri: " + uriString, exchange, e);
+        }
+        if (uriString != null) {
+            URI uri = new URI(uriString);
+            queryString = uri.getQuery();
+        }
         if (queryString == null) {
             queryString = endpoint.getHttpUri().getRawQuery();
         }

Modified: camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java (original)
+++ camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java Sun Oct  9 07:34:42 2011
@@ -131,6 +131,23 @@ public class HttpProducerSelectMethodTes
         producer.process(exchange);
         producer.stop();
     }
+    
+    @Test 
+    public void withHttpURIInHeader() throws Exception {
+        localServer.register("/", new BasicValidationHandler("GET", "q=Camel", null, getExpectedContent()));
+
+        HttpComponent component = context.getComponent("http4", HttpComponent.class);
+
+        HttpEndpoint endpoiont = (HttpEndpoint) component.createEndpoint("http4://" + getHostName() + ":" + getPort());
+        HttpProducer producer = new HttpProducer(endpoiont);
+
+        Exchange exchange = producer.createExchange();
+        exchange.getIn().setBody("");
+        exchange.getIn().setHeader(Exchange.HTTP_URI, "http://" + getHostName() + ":" + getPort() + "?q=Camel");
+        producer.start();
+        producer.process(exchange);
+        producer.stop();
+    }
 
     @Test
     public void withQueryInHeaderOverrideEndpoint() throws Exception {

Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java?rev=1180557&r1=1180556&r2=1180557&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpClientRouteTest.java Sun Oct  9 07:34:42 2011
@@ -86,6 +86,18 @@ public class HttpClientRouteTest extends
         template.sendBody("direct:start4", "test");
         mockEndpoint.assertIsSatisfied();        
     }
+    
+    @Test
+    public void testHttpRouteWithHttpURI() throws Exception {
+        Exchange exchange = template.send("http://localhost:" + port2 + "/querystring", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setBody("");
+                exchange.getIn().setHeader(Exchange.HTTP_URI, "http://localhost:" + port2 + "/querystring?id=test");
+            }
+        });
+        assertEquals("Get a wrong response.", "test", exchange.getOut().getBody(String.class));
+    }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {