Author: wtam Date: Fri Feb 27 04:55:02 2009 New Revision: 748392 URL: http://svn.apache.org/viewvc?rev=748392&view=rev Log: [CAMEL-1400] Restlet default binding does not acknowledge Fault message in the exchange when creating a response
Added: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java (with props) Modified: camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.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=748392&r1=748391&r2=748392&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 Fri Feb 27 04:55:02 2009 @@ -17,6 +17,8 @@ package org.apache.camel.component.restlet; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import java.util.Map; import javax.xml.transform.dom.DOMSource; @@ -165,8 +167,26 @@ public void populateRestletResponseFromExchange(Exchange exchange, Response response) { + Message out = null; + if (exchange.isFailed()) { + // 500 for internal server error which can be overridden by response code in header + response.setStatus(Status.valueOf(500)); + out = exchange.getFault(false); + if (out == null) { + Throwable t = exchange.getException(); + if (t != null) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + response.setEntity(sw.toString(), MediaType.TEXT_PLAIN); + return; + } + } + } else { + out = exchange.getOut(); + } + // get content type - Message out = exchange.getOut(); MediaType mediaType = out.getHeader(RestletConstants.MEDIA_TYPE, MediaType.class); if (mediaType == null) { Object body = out.getBody(); Added: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java?rev=748392&view=auto ============================================================================== --- camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java (added) +++ camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java Fri Feb 27 04:55:02 2009 @@ -0,0 +1,63 @@ +/** + * 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.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +/** + * + * @version $Revision$ + */ +public class RestletFaultTest extends ContextTestSupport { + + @Override + protected RouteBuilder createRouteBuilder() { + + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("restlet:http://localhost:9080/users/{username}?restletMethod=POST").process(new Processor() { + public void process(Exchange exchange) throws Exception { + exchange.getFault().setHeader(RestletConstants.RESPONSE_CODE, "404"); + exchange.getFault().setHeader(RestletConstants.MEDIA_TYPE, "text/plain"); + exchange.getFault().setBody("Application fault"); + + } + }); + } + }; + } + + public void testFaultResponse() throws Exception { + HttpMethod method = new PostMethod("http://localhost:9080/users/homer"); + try { + HttpClient client = new HttpClient(); + assertEquals(404, client.executeMethod(method)); + assertTrue(method.getResponseHeader("Content-Type").getValue() + .startsWith("text/plain")); + } finally { + method.releaseConnection(); + } + + } +} Propchange: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletFaultTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date