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/30 04:47:06 UTC
svn commit: r980636 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/
components/camel-http/src/main/java/org/apache/camel/component/http/
components/camel-http4/src/main/java/org/apache/camel/component/http4/
components/camel-http4/src/mai...
Author: ningjiang
Date: Fri Jul 30 02:47:05 2010
New Revision: 980636
URL: http://svn.apache.org/viewvc?rev=980636&view=rev
Log:
CAMEL-3013 HttpProducer should support to set the http protocol version from message header
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.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/HttpProducerHelper.java
camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java
camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java
camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=980636&r1=980635&r2=980636&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Fri Jul 30 02:47:05 2010
@@ -76,6 +76,7 @@ public interface Exchange {
String HTTP_CHARACTER_ENCODING = "CamelHttpCharacterEncoding";
String HTTP_METHOD = "CamelHttpMethod";
String HTTP_PATH = "CamelHttpPath";
+ String HTTP_PROTOCOL_VERSION = "CamelHttpProtocolVersion";
String HTTP_QUERY = "CamelHttpQuery";
String HTTP_RESPONSE_CODE = "CamelHttpResponseCode";
String HTTP_URI = "CamelHttpUri";
@@ -83,6 +84,7 @@ public interface Exchange {
String HTTP_CHUNKED = "CamelHttpChunked";
String HTTP_SERVLET_REQUEST = "CamelHttpServletRequest";
String HTTP_SERVLET_RESPONSE = "CamelHttpServletResponse";
+
String INTERCEPTED_ENDPOINT = "CamelInterceptedEndpoint";
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=980636&r1=980635&r2=980636&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 Fri Jul 30 02:47:05 2010
@@ -39,11 +39,13 @@ import org.apache.camel.util.IOHelper;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpVersion;
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -65,8 +67,15 @@ public class HttpProducer extends Defaul
if (((HttpEndpoint)getEndpoint()).isBridgeEndpoint()) {
exchange.setProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.TRUE);
}
- HttpMethod method = createMethod(exchange);
+ HttpMethod method = createMethod(exchange);
Message in = exchange.getIn();
+ String httpProtocolVersion = in.getHeader(Exchange.HTTP_PROTOCOL_VERSION, String.class);
+ if (httpProtocolVersion != null) {
+ // set the HTTP protocol version
+ HttpMethodParams params = method.getParams();
+ params.setVersion(HttpVersion.parse(httpProtocolVersion));
+ }
+
HeaderFilterStrategy strategy = getEndpoint().getHeaderFilterStrategy();
// propagate headers as HTTP headers
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=980636&r1=980635&r2=980636&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 Fri Jul 30 02:47:05 2010
@@ -50,6 +50,7 @@ import org.apache.http.client.methods.Ht
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
+import org.apache.http.params.CoreProtocolPNames;
/**
* @version $Revision$
@@ -71,6 +72,11 @@ public class HttpProducer extends Defaul
}
HttpRequestBase httpRequest = createMethod(exchange);
Message in = exchange.getIn();
+ String httpProtocolVersion = in.getHeader(Exchange.HTTP_PROTOCOL_VERSION, String.class);
+ if (httpProtocolVersion != null) {
+ // set the HTTP protocol version
+ httpRequest.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpProducerHelper.parserHttpVersion(httpProtocolVersion));
+ }
HeaderFilterStrategy strategy = getEndpoint().getHeaderFilterStrategy();
// propagate headers as HTTP headers
Modified: camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpProducerHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpProducerHelper.java?rev=980636&r1=980635&r2=980636&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpProducerHelper.java (original)
+++ camel/trunk/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpProducerHelper.java Fri Jul 30 02:47:05 2010
@@ -22,6 +22,8 @@ import org.apache.camel.Exchange;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.http4.HttpEndpoint;
import org.apache.camel.component.http4.HttpMethods;
+import org.apache.http.HttpVersion;
+import org.apache.http.ProtocolException;
/**
* Helper methods for HTTP producers.
@@ -122,5 +124,35 @@ public final class HttpProducerHelper {
return answer;
}
+
+ public static HttpVersion parserHttpVersion(String s) throws ProtocolException {
+ int major;
+ int minor;
+ if (s == null) {
+ throw new IllegalArgumentException("String may not be null");
+ }
+ if (!s.startsWith("HTTP/")) {
+ throw new ProtocolException("Invalid HTTP version string: " + s);
+ }
+ int i1 = "HTTP/".length();
+ int i2 = s.indexOf(".", i1);
+ if (i2 == -1) {
+ throw new ProtocolException("Invalid HTTP version number: " + s);
+ }
+ try {
+ major = Integer.parseInt(s.substring(i1, i2));
+ } catch (NumberFormatException e) {
+ throw new ProtocolException("Invalid HTTP major version number: " + s);
+ }
+ i1 = i2 + 1;
+ i2 = s.length();
+ try {
+ minor = Integer.parseInt(s.substring(i1, i2));
+ } catch (NumberFormatException e) {
+ throw new ProtocolException("Invalid HTTP minor version number: " + s);
+ }
+ return new HttpVersion(major, minor);
+
+ }
}
Modified: camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java?rev=980636&r1=980635&r2=980636&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java (original)
+++ camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java Fri Jul 30 02:47:05 2010
@@ -16,13 +16,19 @@
*/
package org.apache.camel.component.http4;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.component.http4.handler.HeaderValidationHandler;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
import org.apache.http.localserver.LocalTestServer;
+import org.apache.http.protocol.HttpContext;
import org.junit.Test;
/**
@@ -37,6 +43,7 @@ public class HttpCamelHeadersTest extend
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("TestHeader", "test");
exchange.getIn().setHeader("Accept-Language", "pl");
+ exchange.getIn().setHeader(Exchange.HTTP_PROTOCOL_VERSION, "HTTP/1.0");
}
});
@@ -57,6 +64,26 @@ public class HttpCamelHeadersTest extend
expectedHeaders.put("TestHeader", "test");
expectedHeaders.put("Accept-Language", "pl");
- server.register("/", new HeaderValidationHandler("GET", null, null, getExpectedContent(), expectedHeaders));
+ server.register("/", new MyHeaderValidationHandler("GET", "HTTP/1.0", getExpectedContent(), expectedHeaders));
+ }
+
+ class MyHeaderValidationHandler extends HeaderValidationHandler {
+ private String expectProtocolVersion;
+
+ public MyHeaderValidationHandler(String expectedMethod, String protocolVersion,
+ String responseContent, Map<String, String> expectedHeaders) {
+ super(expectedMethod, null, null, responseContent, expectedHeaders);
+ expectProtocolVersion = protocolVersion;
+ }
+
+ public void handle(final HttpRequest request, final HttpResponse response,
+ final HttpContext context) throws HttpException, IOException {
+ if (!expectProtocolVersion.equals(request.getProtocolVersion().toString())) {
+ response.setStatusCode(HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED);
+ return;
+ }
+ super.handle(request, response, context);
+ }
+
}
}
\ No newline at end of file
Modified: camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java?rev=980636&r1=980635&r2=980636&view=diff
==============================================================================
--- camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java (original)
+++ camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java Fri Jul 30 02:47:05 2010
@@ -47,17 +47,17 @@ public class HeaderValidationHandler ext
if (expectedHeaders != null) {
for (Entry<String, String> entry : expectedHeaders.entrySet()) {
- boolean haederExist = false;
+ boolean headerExist = false;
Header[] headers = request.getHeaders(entry.getKey());
for (Header header : headers) {
if (header.getValue().equalsIgnoreCase(entry.getValue())) {
- haederExist = true;
+ headerExist = true;
break;
}
}
- if (!haederExist) {
+ if (!headerExist) {
response.setStatusCode(HttpStatus.SC_EXPECTATION_FAILED);
return;
}
Modified: camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java?rev=980636&r1=980635&r2=980636&view=diff
==============================================================================
--- camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java (original)
+++ camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpHeaderTest.java Fri Jul 30 02:47:05 2010
@@ -19,6 +19,9 @@ package org.apache.camel.component.jetty
import java.util.Map;
import java.util.Map.Entry;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
@@ -35,20 +38,26 @@ public class HttpHeaderTest extends Came
public void testHttpHeaders() throws Exception {
String result = template.requestBody("direct:start", "hello", String.class);
assertEquals("Should send a right http header to the server.", "Find the key!", result);
+
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- from("direct:start").setHeader("SOAPAction", constant("http://xxx.com/interfaces/ticket"))
+ from("direct:start")
+ .setHeader("SOAPAction", constant("http://xxx.com/interfaces/ticket"))
.setHeader("Content-Type", constant("text/xml; charset=utf-8"))
+ .setHeader(Exchange.HTTP_PROTOCOL_VERSION, constant("HTTP/1.0"))
.to("http://localhost:9080/myapp/mytest");
from("jetty:http://localhost:9080/myapp/mytest").process(new Processor() {
public void process(Exchange exchange) throws Exception {
Map<String, Object> headers = exchange.getIn().getHeaders();
+ ServletRequest request = exchange.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST, ServletRequest.class);
+ assertNotNull(request);
+ assertEquals("Get a wong http protocol version", request.getProtocol(), "HTTP/1.0");
for (Entry<String, Object> entry : headers.entrySet()) {
if ("SOAPAction".equals(entry.getKey()) && "http://xxx.com/interfaces/ticket".equals(entry.getValue())) {
exchange.getOut().setBody("Find the key!");