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 2010/07/15 16:51:11 UTC

svn commit: r964453 - in /camel/trunk/components: camel-http/src/main/java/org/apache/camel/component/http/ camel-http/src/test/java/org/apache/camel/component/http/ camel-jetty/src/main/java/org/apache/camel/component/jetty/

Author: ningjiang
Date: Thu Jul 15 14:51:10 2010
New Revision: 964453

URL: http://svn.apache.org/viewvc?rev=964453&view=rev
Log:
CAMEL-2950, CAMEL-2945 Fixed the issue of HttpEndpoint uri

Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
    camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpGetTest.java
    camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java
    camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?rev=964453&r1=964452&r2=964453&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java Thu Jul 15 14:51:10 2010
@@ -17,6 +17,7 @@
 package org.apache.camel.component.http;
 
 import java.net.URI;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
@@ -195,7 +196,11 @@ public class HttpComponent extends Heade
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-
+        String addressUri = uri;
+        if (!uri.startsWith("http:") && !uri.startsWith("https:")) {
+            addressUri = remaining;
+        }
+        Map<String, Object> httpClientParameters = new HashMap<String, Object>(parameters);
         // must extract well known parameters before we create the endpoint
         HttpBinding binding = resolveAndRemoveReferenceParameter(parameters, "httpBindingRef", HttpBinding.class);
         if (binding == null) {
@@ -218,11 +223,10 @@ public class HttpComponent extends Heade
         // create the configurer to use for this endpoint (authMethods contains the used methods created by the configurer)
         final Set<AuthMethod> authMethods = new LinkedHashSet<AuthMethod>();
         HttpClientConfigurer configurer = createHttpClientConfigurer(parameters, authMethods);
-        
+        URI endpointUri = URISupport.createRemainingURI(new URI(addressUri), CastUtils.cast(httpClientParameters));
         // 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(uri), CastUtils.cast(parameters));
-        uri = httpUri.toString();
-
+        URI httpUri = URISupport.createRemainingURI(new URI(addressUri), CastUtils.cast(parameters));
+        
         // validate http uri that end-user did not duplicate the http part that can be a common error
         String part = httpUri.getSchemeSpecificPart();
         if (part != null) {
@@ -232,9 +236,10 @@ public class HttpComponent extends Heade
                         "The uri part is not configured correctly. You have duplicated the http(s) protocol.");
             }
         }
+        // need to keep the parameters of http client configure to avoid unwiser endpoint caching
 
         // create the endpoint
-        HttpEndpoint endpoint = new HttpEndpoint(uri, this, httpUri, clientParams, httpConnectionManager, configurer);
+        HttpEndpoint endpoint = new HttpEndpoint(endpointUri.toString(), this, httpUri, clientParams, httpConnectionManager, configurer);
         setEndpointHeaderFilterStrategy(endpoint);
 
         // prefer to use endpoint configured over component configured

Modified: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpGetTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpGetTest.java?rev=964453&r1=964452&r2=964453&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpGetTest.java (original)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpGetTest.java Thu Jul 15 14:51:10 2010
@@ -71,8 +71,9 @@ public class HttpGetTest extends CamelTe
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
+                getContext().addComponent("http2", new HttpComponent());
                 from("direct:start").setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"))
-                    .to("http://www.google.com/search").to("mock:results");
+                    .to("http2://http://www.google.com/search").to("mock:results");
             }
         };
     }

Modified: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java?rev=964453&r1=964452&r2=964453&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java (original)
+++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyTest.java Thu Jul 15 14:51:10 2010
@@ -33,6 +33,25 @@ public class HttpProxyTest extends Camel
         assertNull("No proxy configured yet", client.getHostConfiguration().getProxyHost());
         assertEquals("No proxy configured yet", -1, client.getHostConfiguration().getProxyPort());
     }
+    
+    @Test
+    public void testDifferentHttpProxyConfigured() throws Exception {
+        HttpEndpoint http1 = context.getEndpoint("http://www.google.com?proxyHost=myproxy&proxyPort=1234", HttpEndpoint.class);
+        HttpEndpoint http2 = context.getEndpoint("http://www.google.com?test=parameter&proxyHost=myotherproxy&proxyPort=2345", HttpEndpoint.class);
+        
+        HttpClient client1 = http1.createHttpClient();
+        assertEquals("myproxy", client1.getHostConfiguration().getProxyHost());
+        assertEquals(1234, client1.getHostConfiguration().getProxyPort());
+        
+        HttpClient client2 = http2.createHttpClient();
+        assertEquals("myotherproxy", client2.getHostConfiguration().getProxyHost());
+        assertEquals(2345, client2.getHostConfiguration().getProxyPort());
+
+        assertEquals("Get a wrong endpoint uri", "http://www.google.com?proxyHost=myproxy&proxyPort=1234", http1.getEndpointUri());
+        assertEquals("Get a wrong endpoint uri", "http://www.google.com?test=parameter&proxyHost=myotherproxy&proxyPort=2345", http2.getEndpointUri());
+       
+        assertEquals("Should get the same EndpointKey", http1.getEndpointKey(), http2.getEndpointKey());
+    }
 
     @Test
     public void testHttpProxyConfigured() throws Exception {

Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=964453&r1=964452&r2=964453&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original)
+++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Thu Jul 15 14:51:10 2010
@@ -109,8 +109,9 @@ public class JettyHttpComponent extends 
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        uri = uri.startsWith("jetty:") ? remaining : uri;
-
+        String addressUri = uri.startsWith("jetty:") ? remaining : uri;
+        Map<String, Object> httpClientParameters = new HashMap<String, Object>(parameters);
+        
         // must extract well known parameters before we create the endpoint
         List<Handler> handlerList = resolveAndRemoveReferenceListParameter(parameters, "handlers", Handler.class);
         HttpBinding binding = resolveAndRemoveReferenceParameter(parameters, "httpBindingRef", HttpBinding.class);
@@ -130,13 +131,17 @@ public class JettyHttpComponent extends 
             // validate that we could resolve all httpClient. parameters as this component is lenient
             validateParameters(uri, parameters, "httpClient.");
         }
-
+        // keep the configure parameters for the http client
+        for (String key : parameters.keySet()) {
+            httpClientParameters.remove(key);
+        }
+        URI endpointUri = URISupport.createRemainingURI(new URI(addressUri), CastUtils.cast(httpClientParameters));
+        
         // 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(uri), CastUtils.cast(parameters));
-        uri = httpUri.toString();
-
+        URI httpUri = URISupport.createRemainingURI(new URI(addressUri), CastUtils.cast(parameters));
+     
         // create endpoint after all known parameters have been extracted from parameters
-        JettyHttpEndpoint endpoint = new JettyHttpEndpoint(this, uri, httpUri);
+        JettyHttpEndpoint endpoint = new JettyHttpEndpoint(this, endpointUri.toString(), httpUri);
         setEndpointHeaderFilterStrategy(endpoint);
 
         if (client != null) {