Hello Claus! That's not (in my opinion) how it works currently. At present I work on a route which looks like this:
errorHandler( defaultErrorHandler() .retryAttemptedLogLevel(LoggingLevel.DEBUG) .retriesExhaustedLogLevel(LoggingLevel.INFO)); onException(IllegalArgumentException.class) .handled(true) .maximumRedeliveries(0) .beanRef("myResultProvider", "failureResponse"); from("cxf:bean:MyCoolService") .processRef("myValidator") // validates conditional rules .inOut("direct:mySubroute") .beanRef("myResultProvider", "successResponse") If my validator throws a IllegalArgumentException and the result provider writes the response into the in message, the web service will return null. But if I write the response into the out message, the web service will return it. So, I changes my bean to the following "pattern": if (exchange.getPattern().isOutCapable()) { exchange.getOut().setBody(response); } else { exchange.getIn().setBody(response); } And that's the same how the org.apache.camel.processor.ConvertBodyProcessor works (I know you know this, but for the other guys.. :o) ) public class ConvertBodyProcessor implements Processor { ... public void process(Exchange exchange) throws Exception { Message in = exchange.getIn(); if (charset != null) { exchange.setProperty(Exchange.CHARSET_NAME, charset); } Object value = in.getMandatoryBody(type); if (exchange.getPattern().isOutCapable()) { Message out = exchange.getOut(); out.copyFrom(in); out.setBody(value); } else { in.setBody(value); } } ... } Should our custom processors/beans/.. not work in the same way? Cheers, Christian