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 2010/12/27 09:57:05 UTC
svn commit: r1053024 - in /camel/trunk/components/camel-cxf/src:
main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java
test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
Author: ningjiang
Date: Mon Dec 27 08:57:05 2010
New Revision: 1053024
URL: http://svn.apache.org/viewvc?rev=1053024&view=rev
Log:
CAMEL-3353 Fix the issue of CxfRsInvoker silently swallows exceptions
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.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/CxfRsInvoker.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java?rev=1053024&r1=1053023&r2=1053024&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java Mon Dec 27 08:57:05 2010
@@ -144,12 +144,24 @@ public class CxfRsInvoker extends JAXRSI
Throwable exception = camelExchange.getException();
Object result = null;
if (exception instanceof RuntimeCamelException) {
- exception = exception.getCause();
+ // Unwrap the RuntimeCamelException
+ if (exception.getCause() != null) {
+ exception = exception.getCause();
+ }
}
if (exception instanceof WebApplicationException) {
result = ((WebApplicationException)exception).getResponse();
+ if (result != null) {
+ return result;
+ } else {
+ throw (WebApplicationException)exception;
+ }
+ } else {
+ // Send the exception message back
+ WebApplicationException webApplicationException = new WebApplicationException(exception, Response.serverError().entity(exception.toString()).build());
+ throw webApplicationException;
}
- return result;
+
}
return endpoint.getBinding().populateCxfRsResponseFromExchange(camelExchange, cxfExchange);
}
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=1053024&r1=1053023&r2=1053024&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 Mon Dec 27 08:57:05 2010
@@ -17,6 +17,7 @@
package org.apache.camel.component.cxf.jaxrs;
import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
@@ -26,6 +27,7 @@ import javax.ws.rs.core.Response;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.NoErrorHandlerBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.cxf.CxfConstants;
@@ -69,8 +71,12 @@ public class CxfRsConsumerTest extends C
// We just put the response Object into the out message body
exchange.getOut().setBody(customer);
} else {
- Response r = Response.status(404).entity("Can't found the customer with uri " + path).build();
- throw new WebApplicationException(r);
+ if ("/customerservice/customers/456".equals(path)) {
+ Response r = Response.status(404).entity("Can't found the customer with uri " + path).build();
+ throw new WebApplicationException(r);
+ } else {
+ throw new RuntimeCamelException("Can't found the customer with uri " + path);
+ }
}
}
if ("updateCustomer".equals(operationName)) {
@@ -110,6 +116,13 @@ public class CxfRsConsumerTest extends C
} catch (FileNotFoundException exception) {
// do nothing here
}
+ url = new URL("http://localhost:9000/rest/customerservice/customers/256");
+ try {
+ url.openStream();
+ fail("Expect to get exception here");
+ } catch (IOException exception) {
+ // expect the Internal error exception
+ }
}