Author: ningjiang Date: Thu Aug 19 03:36:14 2010 New Revision: 987007 URL: http://svn.apache.org/viewvc?rev=987007&view=rev Log: CAMEL-3057 CXFRS consumer should pass the protocol headers into camel message header
Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java?rev=987007&r1=987006&r2=987007&view=diff ============================================================================== --- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java (original) +++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java Thu Aug 19 03:36:14 2010 @@ -109,6 +109,9 @@ public class DefaultCxfRsBinding impleme copyMessageHeader(cxfMessage, camelMessage, org.apache.cxf.message.Message.ACCEPT_CONTENT_TYPE, Exchange.ACCEPT_CONTENT_TYPE); + //copy the protocol header + copyProtocolHeader(cxfMessage, camelMessage, camelMessage.getExchange()); + camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, method.getReturnType()); camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_GENERIC_TYPE, method.getGenericReturnType()); @@ -252,6 +255,22 @@ public class DefaultCxfRsBinding impleme } } + @SuppressWarnings("unchecked") + protected void copyProtocolHeader(org.apache.cxf.message.Message cxfMessage, Message camelMessage, Exchange camelExchange) { + Map<String, List<String>> headers = (Map<String, List<String>>)cxfMessage.get(org.apache.cxf.message.Message.PROTOCOL_HEADERS); + for (Map.Entry<String, List<String>>entry : headers.entrySet()) { + if (headerFilterStrategy.applyFilterToCamelHeaders(entry.getKey(), entry.getValue(), camelExchange)) { + if (LOG.isTraceEnabled()) { + LOG.trace("Drop CXF message protocol header: " + entry.getKey() + "=" + entry.getValue()); + } + } else { + // just put the first String element, as the complex one is filtered + camelMessage.setHeader(entry.getKey(), entry.getValue().get(0)); + } + continue; + } + } + protected void copyOperationResourceInfoStack(org.apache.cxf.message.Message cxfMessage, Message camelMessage) { OperationResourceInfoStack stack = cxfMessage.get(OperationResourceInfoStack.class); if (stack != null) { Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java?rev=987007&r1=987006&r2=987007&view=diff ============================================================================== --- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java (original) +++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java Thu Aug 19 03:36:14 2010 @@ -74,6 +74,7 @@ public class CxfRsConsumerTest extends C } } if ("updateCustomer".equals(operationName)) { + assertEquals("Get a wrong customer message header", "header1;header2", inMessage.getHeader("test")); String httpMethod = inMessage.getHeader(Exchange.HTTP_METHOD, String.class); assertEquals("Get a wrong http method", "PUT", httpMethod); Customer customer = inMessage.getBody(Customer.class); @@ -117,6 +118,7 @@ public class CxfRsConsumerTest extends C HttpPut put = new HttpPut("http://localhost:9000/rest/customerservice/customers"); StringEntity entity = new StringEntity(PUT_REQUEST, "ISO-8859-1"); entity.setContentType("text/xml; charset=ISO-8859-1"); + put.addHeader("test", "header1;header2"); put.setEntity(entity); HttpClient httpclient = new DefaultHttpClient();