Author: wtam Date: Mon May 21 22:07:53 2012 New Revision: 1341227 URL: http://svn.apache.org/viewvc?rev=1341227&view=rev Log: [CAMEL-5268] camel-restlet producer not passing along the Accept header
Added: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java (with props) Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletHeaderFilterStrategy.java camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletPostXmlRouteAndJSONAsReturnTest.java Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java?rev=1341227&r1=1341226&r2=1341227&view=diff ============================================================================== --- camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java (original) +++ camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java Mon May 21 22:07:53 2012 @@ -39,6 +39,7 @@ import org.restlet.data.CharacterSet; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Method; +import org.restlet.data.Preference; import org.restlet.data.Status; import org.restlet.representation.FileRepresentation; import org.restlet.representation.InputRepresentation; @@ -153,6 +154,12 @@ public class DefaultRestletBinding imple } else { request.setEntity(body, mediaType); } + + MediaType acceptedMediaType = exchange.getIn().getHeader(Exchange.ACCEPT_CONTENT_TYPE, MediaType.class); + if (acceptedMediaType != null) { + request.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(acceptedMediaType)); + } + } public void populateRestletResponseFromExchange(Exchange exchange, Response response) { Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletHeaderFilterStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletHeaderFilterStrategy.java?rev=1341227&r1=1341226&r2=1341227&view=diff ============================================================================== --- camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletHeaderFilterStrategy.java (original) +++ camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletHeaderFilterStrategy.java Mon May 21 22:07:53 2012 @@ -16,6 +16,7 @@ */ package org.apache.camel.component.restlet; +import org.apache.camel.Exchange; import org.apache.camel.impl.DefaultHeaderFilterStrategy; /** @@ -32,5 +33,10 @@ public class RestletHeaderFilterStrategy // filter headers used internally by this component getOutFilter().add(RestletConstants.RESTLET_LOGIN); getOutFilter().add(RestletConstants.RESTLET_PASSWORD); + + // The "CamelAcceptContentType" header is not added to the outgoing HTTP + // headers but it will be going out as "Accept. + getOutFilter().add(Exchange.ACCEPT_CONTENT_TYPE); + } } Modified: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletPostXmlRouteAndJSONAsReturnTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletPostXmlRouteAndJSONAsReturnTest.java?rev=1341227&r1=1341226&r2=1341227&view=diff ============================================================================== --- camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletPostXmlRouteAndJSONAsReturnTest.java (original) +++ camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletPostXmlRouteAndJSONAsReturnTest.java Mon May 21 22:07:53 2012 @@ -67,7 +67,7 @@ public class RestletPostXmlRouteAndJSONA postRequestMessage(REQUEST_MESSAGE_WITH_XML_TAG); } - private void postRequestMessage(final String message) throws Exception { + protected void postRequestMessage(final String message) throws Exception { Exchange exchange = template.request("direct:start", new Processor() { public void process(Exchange exchange) throws Exception { exchange.getIn().setBody(message); Added: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java?rev=1341227&view=auto ============================================================================== --- camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java (added) +++ camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java Mon May 21 22:07:53 2012 @@ -0,0 +1,70 @@ +/** + * 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.restlet; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; + +/** + * Unit test for sending "Accept" HTTP header + */ +public class RestletProducerAcceptContentTypeTest extends RestletPostXmlRouteAndJSONAsReturnTest { + private String url = "restlet:http://localhost:" + portNum + "/users?restletMethod=POST"; + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + + from("jetty://http://localhost:" + + portNum + "/users") + .process(new Processor() { + public void process(Exchange exchange) throws Exception { + String body = exchange.getIn().getBody(String.class); + assertNotNull(body); + exchange.getOut().setBody("{OK}"); + exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "application/json"); + assertEquals("application/json", exchange.getIn().getHeader("Accept", String.class)); + + } + }); + + // route to restlet + from("direct:start").to(url); + } + }; + } + + @Override + protected void postRequestMessage(final String message) throws Exception { + Exchange exchange = template.request("direct:start", new Processor() { + public void process(Exchange exchange) throws Exception { + exchange.getIn().setBody(message); + exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json"); + exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json"); + + } + }); + + assertNotNull(exchange); + assertTrue(exchange.hasOut()); + + String s = exchange.getOut().getBody(String.class); + assertEquals("{OK}", s); + } +} Propchange: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletProducerAcceptContentTypeTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date