Repository: camel Updated Branches: refs/heads/camel-2.15.x b668a89af -> 23a642f6a refs/heads/master b8590c834 -> 37c3572df
CAMEL-8476: doTry should break out if fault message was set. Make setting fault message same as setting regular message on either IN or OUT. Do not force OUT anymore. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/37c3572d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/37c3572d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/37c3572d Branch: refs/heads/master Commit: 37c3572df144121cf2c8c1b46d90a00da59ceac1 Parents: b8590c8 Author: Claus Ibsen <[email protected]> Authored: Sat Mar 14 08:49:55 2015 +0100 Committer: Claus Ibsen <[email protected]> Committed: Sat Mar 14 14:30:08 2015 +0100 ---------------------------------------------------------------------- .../apache/camel/builder/ExpressionBuilder.java | 6 +- .../apache/camel/builder/ProcessorBuilder.java | 22 +++++-- .../org/apache/camel/impl/DefaultExchange.java | 5 +- .../camel/impl/DefaultExchangeHolder.java | 6 ++ .../camel/impl/InterceptSendToEndpoint.java | 2 - .../camel/processor/OnCompletionProcessor.java | 13 +++++ .../apache/camel/processor/PipelineHelper.java | 10 ++-- .../org/apache/camel/processor/RoutingSlip.java | 5 -- .../apache/camel/processor/TryProcessor.java | 2 + .../interceptor/HandleFaultInterceptor.java | 12 +++- .../org/apache/camel/util/ExchangeHelper.java | 7 ++- .../apache/camel/processor/TrySetFaultTest.java | 61 ++++++++++++++++++++ .../apache/camel/component/cxf/CxfConsumer.java | 8 ++- .../component/jms/EndpointMessageListener.java | 11 ++-- .../restlet/DefaultRestletBinding.java | 5 +- .../integration/adapter/CamelTargetAdapter.java | 3 +- .../processor/SpringSetFaultBodyTest.java | 7 +-- 17 files changed, 147 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java index a31e895..c22ad80 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java @@ -1110,7 +1110,8 @@ public final class ExpressionBuilder { public static Expression faultBodyExpression() { return new ExpressionAdapter() { public Object evaluate(Exchange exchange) { - return exchange.getOut().isFault() ? exchange.getOut().getBody() : null; + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + return msg.isFault() ? msg.getBody() : null; } @Override @@ -1127,7 +1128,8 @@ public final class ExpressionBuilder { public static <T> Expression faultBodyExpression(final Class<T> type) { return new ExpressionAdapter() { public Object evaluate(Exchange exchange) { - return exchange.getOut().isFault() ? exchange.getOut().getBody(type) : null; + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + return msg.isFault() ? msg.getBody(type) : null; } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java index e2c88b4..25a6f9f 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ProcessorBuilder.java @@ -77,14 +77,19 @@ public final class ProcessorBuilder { } /** - * Creates a processor which sets the body of the FAULT message (FAULT must be OUT) to the value of the expression + * Creates a processor which sets the body of the FAULT message to the value of the expression */ public static Processor setFaultBody(final Expression expression) { return new Processor() { public void process(Exchange exchange) { Object newBody = expression.evaluate(exchange, Object.class); - exchange.getOut().setFault(true); - exchange.getOut().setBody(newBody); + if (exchange.hasOut()) { + exchange.getOut().setFault(true); + exchange.getOut().setBody(newBody); + } else { + exchange.getIn().setFault(true); + exchange.getIn().setBody(newBody); + } } @Override @@ -136,14 +141,19 @@ public final class ProcessorBuilder { } /** - * Sets the header on the FAULT message (FAULT must be OUT) + * Sets the header on the FAULT message */ public static Processor setFaultHeader(final String name, final Expression expression) { return new Processor() { public void process(Exchange exchange) { Object value = expression.evaluate(exchange, Object.class); - exchange.getOut().setFault(true); - exchange.getOut().setHeader(name, value); + if (exchange.hasOut()) { + exchange.getOut().setFault(true); + exchange.getOut().setHeader(name, value); + } else { + exchange.getIn().setFault(true); + exchange.getIn().setHeader(name, value); + } } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java index 3045838..eb6db98 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java @@ -345,7 +345,10 @@ public final class DefaultExchange implements Exchange { } public boolean isFailed() { - return (hasOut() && getOut().isFault()) || getException() != null; + if (exception != null) { + return true; + } + return hasOut() ? getOut().isFault() : getIn().isFault(); } public boolean isTransacted() { http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java index 20bb42d..e6a277b 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchangeHolder.java @@ -61,6 +61,7 @@ public class DefaultExchangeHolder implements Serializable { private String exchangeId; private Object inBody; private Object outBody; + private Boolean inFaultFlag = Boolean.FALSE; private Boolean outFaultFlag = Boolean.FALSE; private Map<String, Object> inHeaders; private Map<String, Object> outHeaders; @@ -102,6 +103,8 @@ public class DefaultExchangeHolder implements Serializable { payload.outBody = checkSerializableBody("out body", exchange, exchange.getOut().getBody()); payload.outFaultFlag = exchange.getOut().isFault(); payload.safeSetOutHeaders(exchange); + } else { + payload.inFaultFlag = exchange.getIn().isFault(); } if (includeProperties) { payload.safeSetProperties(exchange); @@ -126,6 +129,9 @@ public class DefaultExchangeHolder implements Serializable { if (payload.inHeaders != null) { exchange.getIn().setHeaders(payload.inHeaders); } + if (payload.inFaultFlag != null) { + exchange.getIn().setFault(payload.inFaultFlag); + } if (payload.outBody != null) { exchange.getOut().setBody(payload.outBody); if (payload.outHeaders != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java b/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java index 2a333af..9c73ed2 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/impl/InterceptSendToEndpoint.java @@ -132,8 +132,6 @@ public class InterceptSendToEndpoint implements Endpoint { detour.process(exchange); } catch (Exception e) { exchange.setException(e); - callback.done(true); - return true; } // Decide whether to continue or not; similar logic to the Pipeline http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java index 6575cb2..e420772 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java @@ -256,9 +256,16 @@ public class OnCompletionProcessor extends ServiceSupport implements AsyncProces // must use a copy as we dont want it to cause side effects of the original exchange final Exchange copy = prepareExchange(exchange); final Exception original = copy.getException(); + final boolean originalFault = copy.hasOut() ? copy.getOut().isFault() : copy.getIn().isFault(); // must remove exception otherwise onFailure routing will fail as well // the caused exception is stored as a property (Exchange.EXCEPTION_CAUGHT) on the exchange copy.setException(null); + // must clear fault otherwise onFailure routing will fail as well + if (copy.hasOut()) { + copy.getOut().setFault(false); + } else { + copy.getIn().setFault(false); + } if (executorService != null) { executorService.submit(new Callable<Exchange>() { @@ -276,6 +283,12 @@ public class OnCompletionProcessor extends ServiceSupport implements AsyncProces doProcess(processor, copy); // restore exception after processing copy.setException(original); + // restore fault after processing + if (copy.hasOut()) { + copy.getOut().setFault(originalFault); + } else { + copy.getIn().setFault(originalFault); + } } } http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/processor/PipelineHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/PipelineHelper.java b/camel-core/src/main/java/org/apache/camel/processor/PipelineHelper.java index ebc5398..6c111e8 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/PipelineHelper.java +++ b/camel-core/src/main/java/org/apache/camel/processor/PipelineHelper.java @@ -17,6 +17,7 @@ package org.apache.camel.processor; import org.apache.camel.Exchange; +import org.apache.camel.Message; import org.slf4j.Logger; import static org.apache.camel.util.ExchangeHelper.hasExceptionBeenHandledByErrorHandler; @@ -45,12 +46,13 @@ public final class PipelineHelper { boolean exceptionHandled = hasExceptionBeenHandledByErrorHandler(exchange); if (exchange.isFailed() || exchange.isRollbackOnly() || exceptionHandled) { // We need to write a warning message when the exception and fault message be set at the same time - if (exchange.hasOut() && exchange.getOut().isFault() && exchange.getException() != null) { + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + if (msg.isFault() && exchange.getException() != null) { StringBuilder sb = new StringBuilder(); sb.append("Message exchange has failed: " + message + " for exchange: ").append(exchange); sb.append(" Warning: Both fault and exception exists on the exchange, its best practice to only set one of them."); sb.append(" Exception: ").append(exchange.getException()); - sb.append(" Fault: ").append(exchange.getOut()); + sb.append(" Fault: ").append(msg); if (exceptionHandled) { sb.append(" Handled by the error handler."); } @@ -67,8 +69,8 @@ public final class PipelineHelper { if (exchange.getException() != null) { sb.append(" Exception: ").append(exchange.getException()); } - if (exchange.hasOut() && exchange.getOut().isFault()) { - sb.append(" Fault: ").append(exchange.getOut()); + if (msg.isFault()) { + sb.append(" Fault: ").append(msg); } if (exceptionHandled) { sb.append(" Handled by the error handler."); http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java b/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java index 88e57db..00625d6 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java +++ b/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java @@ -408,11 +408,6 @@ public class RoutingSlip extends ServiceSupport implements AsyncProcessor, Trace */ private void copyOutToIn(Exchange result, Exchange source) { result.setException(source.getException()); - - if (source.hasOut() && source.getOut().isFault()) { - result.getOut().copyFrom(source.getOut()); - } - result.setIn(getResultMessage(source)); result.getProperties().clear(); http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/processor/TryProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/TryProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/TryProcessor.java index b53a14e..24cea69 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/TryProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/TryProcessor.java @@ -34,6 +34,8 @@ import org.apache.camel.util.ServiceHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.camel.processor.PipelineHelper.continueProcessing; + /** * Implements try/catch/finally type processing * http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/processor/interceptor/HandleFaultInterceptor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/interceptor/HandleFaultInterceptor.java b/camel-core/src/main/java/org/apache/camel/processor/interceptor/HandleFaultInterceptor.java index 538fe88..06394c4 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/interceptor/HandleFaultInterceptor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/interceptor/HandleFaultInterceptor.java @@ -19,6 +19,7 @@ package org.apache.camel.processor.interceptor; import org.apache.camel.AsyncCallback; import org.apache.camel.CamelException; import org.apache.camel.Exchange; +import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.processor.DelegateAsyncProcessor; @@ -56,11 +57,16 @@ public class HandleFaultInterceptor extends DelegateAsyncProcessor { */ protected void handleFault(Exchange exchange) { // Take the fault message out before we keep on going - if (exchange.hasOut() && exchange.getOut().isFault()) { - final Object faultBody = exchange.getOut().getBody(); + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + if (msg.isFault()) { + final Object faultBody = msg.getBody(); if (faultBody != null && exchange.getException() == null) { // remove fault as we are converting it to an exception - exchange.setOut(null); + if (exchange.hasOut()) { + exchange.setOut(null); + } else { + exchange.setIn(null); + } if (faultBody instanceof Throwable) { exchange.setException((Throwable) faultBody); } else { http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java b/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java index cc6836d..88905d7 100644 --- a/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/ExchangeHelper.java @@ -625,7 +625,9 @@ public final class ExchangeHelper { // result could have a fault message if (hasFaultMessage(exchange)) { - return exchange.getOut().getBody(); + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + answer = msg.getBody(); + return answer; } // okay no fault then return the response according to the pattern @@ -654,7 +656,8 @@ public final class ExchangeHelper { * @return <tt>true</tt> if fault message exists */ public static boolean hasFaultMessage(Exchange exchange) { - return exchange.hasOut() && exchange.getOut().isFault() && exchange.getOut().getBody() != null; + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + return msg.isFault() && msg.getBody() != null; } /** http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/camel-core/src/test/java/org/apache/camel/processor/TrySetFaultTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/TrySetFaultTest.java b/camel-core/src/test/java/org/apache/camel/processor/TrySetFaultTest.java new file mode 100644 index 0000000..637b779 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/processor/TrySetFaultTest.java @@ -0,0 +1,61 @@ +/** + * 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.processor; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; + +public class TrySetFaultTest extends ContextTestSupport { + + public void testSetFault() throws Exception { + getMockEndpoint("mock:a").expectedMessageCount(0); + getMockEndpoint("mock:b").expectedMessageCount(0); + + template.requestBody("direct:start", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .to("direct:a") + .to("mock:a") + .to("direct:b") + .to("mock:b"); + + from("direct:a") + .doTry() + .setFaultBody(constant("Failed at A")) + .doCatch(Exception.class) + .to("mock:catch-a") + .end(); + + from("direct:b") + .doTry() + .setFaultBody(constant("Failed at B")) + .doCatch(Exception.class) + .to("mock:catch-a") + .end() + .to("log:b"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java index 4198dfb..fab7267 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java @@ -220,8 +220,12 @@ public class CxfConsumer extends DefaultConsumer { private void checkFailure(org.apache.camel.Exchange camelExchange, Exchange cxfExchange) throws Fault { final Throwable t; if (camelExchange.isFailed()) { - t = (camelExchange.hasOut() && camelExchange.getOut().isFault()) ? camelExchange.getOut() - .getBody(Throwable.class) : camelExchange.getException(); + org.apache.camel.Message camelMsg = camelExchange.hasOut() ? camelExchange.getOut() : camelExchange.getIn(); + if (camelMsg.isFault()) { + t = camelMsg.getBody(Throwable.class); + } else { + t = camelExchange.getException(); + } cxfExchange.getInMessage().put(FaultMode.class, FaultMode.UNCHECKED_APPLICATION_FAULT); if (t instanceof Fault) { cxfExchange.getInMessage().put(FaultMode.class, FaultMode.CHECKED_APPLICATION_FAULT); http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java index e1396b1..9f7778a 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/EndpointMessageListener.java @@ -185,10 +185,13 @@ public class EndpointMessageListener implements MessageListener { // do not send a reply but wrap and rethrow the exception rce = wrapRuntimeCamelException(exchange.getException()); } - } else if (exchange.hasOut() && exchange.getOut().isFault()) { - // a fault occurred while processing - body = exchange.getOut(); - cause = null; + } else { + org.apache.camel.Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + if (msg.isFault()) { + // a fault occurred while processing + body = msg; + cause = null; + } } } else { // process OK so get the reply body if we are InOut and has a body http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java index dbc949d..35369bf 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/DefaultRestletBinding.java @@ -217,8 +217,9 @@ public class DefaultRestletBinding implements RestletBinding, HeaderFilterStrate if (exchange.isFailed()) { // 500 for internal server error which can be overridden by response code in header response.setStatus(Status.valueOf(500)); - if (exchange.hasOut() && exchange.getOut().isFault()) { - out = exchange.getOut(); + Message msg = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + if (msg.isFault()) { + out = msg; } else { // print exception as message and stacktrace Exception t = exchange.getException(); http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java index 46671fd..50b1434 100644 --- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java +++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java @@ -73,7 +73,8 @@ public class CamelTargetAdapter extends AbstractCamelAdapter implements MessageH Exchange inExchange = new DefaultExchange(getCamelContext(), pattern); SpringIntegrationBinding.storeToCamelMessage(message, inExchange.getIn()); Exchange outExchange = getCamelTemplate().send(getCamelEndpointUri(), inExchange); - if (outExchange.getOut() != null && outExchange.getOut().isFault()) { + org.apache.camel.Message camelMsg = outExchange.hasOut() ? outExchange.getOut() : outExchange.getIn(); + if (camelMsg.isFault()) { result = true; } http://git-wip-us.apache.org/repos/asf/camel/blob/37c3572d/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetFaultBodyTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetFaultBodyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetFaultBodyTest.java index fa00161..f0b0f25 100644 --- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetFaultBodyTest.java +++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetFaultBodyTest.java @@ -33,7 +33,7 @@ public class SpringSetFaultBodyTest extends SpringTestSupport { } public void testSetFaultBody() throws Exception { - Exchange out = template.send("direct:start", new Processor() { + Exchange out = template.request("direct:start", new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setBody("Hello World"); @@ -41,8 +41,7 @@ public class SpringSetFaultBodyTest extends SpringTestSupport { }); assertNotNull(out); - assertTrue(out.hasOut()); - assertEquals("Bye World", out.getOut().getBody()); - assertTrue("Should be a fault body", out.getOut().isFault()); + assertEquals("Bye World", out.getIn().getBody()); + assertTrue("Should be a fault body", out.getIn().isFault()); } }
