Author: ningjiang Date: Thu Apr 14 07:48:40 2011 New Revision: 1092034 URL: http://svn.apache.org/viewvc?rev=1092034&view=rev Log: CAMEL-3860 cxfrs producer supports to configure the query parameter with the Exchange.HTTP_QUERY message header
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java?rev=1092034&r1=1092033&r2=1092034&view=diff ============================================================================== --- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java (original) +++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java Thu Apr 14 07:48:40 2011 @@ -16,12 +16,15 @@ */ package org.apache.camel.component.cxf.jaxrs; +import java.io.UnsupportedEncodingException; import java.lang.ref.SoftReference; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.net.URLDecoder; import java.util.Collection; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -33,6 +36,7 @@ import org.apache.camel.Message; import org.apache.camel.component.cxf.CxfConstants; import org.apache.camel.component.cxf.CxfOperationException; import org.apache.camel.component.cxf.util.CxfEndpointUtils; +import org.apache.camel.converter.IOConverter; import org.apache.camel.impl.DefaultProducer; import org.apache.camel.util.LRUCache; import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean; @@ -104,6 +108,13 @@ public class CxfRsProducer extends Defau // check if there is a query map in the message header Map<String, String> maps = inMessage.getHeader(CxfConstants.CAMEL_CXF_RS_QUERY_MAP, Map.class); if (maps == null) { + // Get the map from HTTP_QUERY header + String queryString = inMessage.getHeader(Exchange.HTTP_QUERY, String.class); + if (queryString != null) { + maps = getQueryParametersFromQueryString(queryString, IOConverter.getCharsetName(exchange)); + } + } + if (maps == null) { maps = cxfRsEndpoint.getParameters(); } if (maps != null) { @@ -111,6 +122,10 @@ public class CxfRsProducer extends Defau client.query(entry.getKey(), entry.getValue()); } } + String queryString = inMessage.getHeader(Exchange.HTTP_QUERY, String.class); + if (queryString != null) { + + } CxfRsBinding binding = cxfRsEndpoint.getBinding(); @@ -202,6 +217,21 @@ public class CxfRsProducer extends Defau exchange.getOut().setBody(response); } } + + private Map<String, String> getQueryParametersFromQueryString(String queryString, String charset) throws UnsupportedEncodingException { + Map<String, String> answer = new LinkedHashMap<String, String>(); + for (String param : queryString.split("&")) { + String[] pair = param.split("=", 2); + if (pair.length == 2) { + String name = URLDecoder.decode(pair[0], charset); + String value = URLDecoder.decode(pair[1], charset); + answer.put(name, value); + } else { + throw new IllegalArgumentException("Invalid parameter, expected to be a pair but was " + param); + } + } + return answer; + } private Method findRightMethod(List<Class<?>> resourceClasses, String methodName, Class[] parameterTypes) throws NoSuchMethodException { Method answer = null; Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java?rev=1092034&r1=1092033&r2=1092034&view=diff ============================================================================== --- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java (original) +++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsRouterTest.java Thu Apr 14 07:48:40 2011 @@ -65,6 +65,23 @@ public class CxfRsRouterTest extends Cam } } + + @Test + public void testGetCustomerWithQuery() throws Exception { + HttpGet get = new HttpGet("http://localhost:9000/route/customerservice/customers?id=123"); + get.addHeader("Accept" , "application/json"); + HttpClient httpclient = new DefaultHttpClient(); + + try { + HttpResponse response = httpclient.execute(get); + assertEquals(200, response.getStatusLine().getStatusCode()); + assertEquals("{\"Customer\":{\"id\":123,\"name\":\"John\"}}", + EntityUtils.toString(response.getEntity())); + } finally { + httpclient.getConnectionManager().shutdown(); + } + } + @Test public void testGetCustomers() throws Exception { HttpGet get = new HttpGet("http://localhost:9000/route/customerservice/customers/");