Author: ningjiang Date: Fri Apr 19 07:22:53 2013 New Revision: 1469718 URL: http://svn.apache.org/r1469718 Log: CAMEL-6296 Support httpConnectionManager.* parameters on Camel-Http
Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpConnectionManagerSettingTest.java Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.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=1469718&r1=1469717&r2=1469718&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 Fri Apr 19 07:22:53 2013 @@ -33,6 +33,7 @@ import org.apache.camel.util.URISupport; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.params.HttpClientParams; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; /** * Defines the <a href="http://camel.apache.org/http.html">HTTP @@ -42,7 +43,7 @@ import org.apache.commons.httpclient.par */ public class HttpComponent extends HeaderFilterStrategyComponent { protected HttpClientConfigurer httpClientConfigurer; - protected HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager(); + protected HttpConnectionManager httpConnectionManager; protected HttpBinding httpBinding; protected HttpConfiguration httpConfiguration; @@ -217,14 +218,28 @@ public class HttpComponent extends Heade IntrospectionSupport.setProperties(clientParams, parameters, "httpClient."); // validate that we could resolve all httpClient. parameters as this component is lenient validateParameters(uri, parameters, "httpClient."); - + // http client can be configured from URI options + HttpConnectionManagerParams connectionManagerParams = new HttpConnectionManagerParams(); + // setup the httpConnectionManagerParams + IntrospectionSupport.setProperties(connectionManagerParams, parameters, "httpConnectionManager."); + validateParameters(uri, parameters, "httpConnectionManager."); + // make sure the component httpConnectionManager is take effect + HttpConnectionManager thisHttpConnectionManager = httpConnectionManager; + if (thisHttpConnectionManager == null) { + // only set the params on the new created http connection manager + thisHttpConnectionManager = new MultiThreadedHttpConnectionManager(); + thisHttpConnectionManager.setParams(connectionManagerParams); + } // 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), httpClientParameters); // create the endpoint - HttpEndpoint endpoint = new HttpEndpoint(endpointUri.toString(), this, clientParams, httpConnectionManager, configurer); + HttpEndpoint endpoint = new HttpEndpoint(endpointUri.toString(), this, clientParams, thisHttpConnectionManager, configurer); + + endpoint.getHttpConnectionManager().setParams(connectionManagerParams); + if (headerFilterStrategy != null) { endpoint.setHeaderFilterStrategy(headerFilterStrategy); } else { Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpConnectionManagerSettingTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpConnectionManagerSettingTest.java?rev=1469718&view=auto ============================================================================== --- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpConnectionManagerSettingTest.java (added) +++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpConnectionManagerSettingTest.java Fri Apr 19 07:22:53 2013 @@ -0,0 +1,57 @@ +/** + * 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 static org.apache.camel.component.http.HttpMethods.POST; +import org.apache.camel.Exchange; +import org.apache.camel.FailedToCreateRouteException; +import org.apache.camel.ResolveEndpointFailedException; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.junit.Before; +import org.junit.Test; + +public class HttpConnectionManagerSettingTest extends CamelTestSupport { + + @Before + public void setUp() throws Exception { + try { + super.setUp(); + fail("Should have thrown ResolveEndpointFailedException"); + } catch (FailedToCreateRouteException e) { + ResolveEndpointFailedException cause = assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause()); + assertTrue(cause.getMessage().endsWith("Unknown parameters=[{xxx=true}]")); + } + } + + @Test + public void testHttpConnectionManagerSettingConfiguration() { + HttpEndpoint endpoint = (HttpEndpoint)context.getEndpoint("http://www.google.com?httpConnectionManager.maxTotalConnections=300"); + HttpConnectionManagerParams params = endpoint.getHttpConnectionManager().getParams(); + assertEquals("Get the wrong parameter.", 300, params.getMaxTotalConnections()); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + from("direct:start").setHeader(Exchange.HTTP_METHOD, POST).to("http://www.google.com?httpConnectionManager.xxx=true"); + } + }; + } + +}