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() {