此问题与前一个问题有关:Apache Camel multicast, exception and Aggregation strategy
我想在回答上一个问题时我错过了解问题。
我尝试处理我在路线中抛出的异常。
.filter(not(successResponsePredicate))
.to("log:com.sdmo.Error?level="+LOG_LEVEL)
.transform(simple("Erreur lors de l'appel copyItem"))
.process(new ConvertCartResponseProcessor())
.throwException(new Exception("copyItemError"))
.end()
通过以下代码处理异常:
onException(java.lang.Exception.class).handled(true).inOut("direct:thrownError");
from("direct:thrownError")
.to("log:com.sdmo.output?level="+LOG_LEVEL);
我的路由是由cxf端点启动的,但是当实现异常处理路由时,返回到我的WS客户端的主体是空的。
我使用调试模式和日志进行了几次检查,以确保异常处理代码设置响应,如果我用简单类型替换正文(POJO类型),我在发送回复时出现了unmarshall错误。
在回复之前记录的最后一行显示正文已明确定义:
INFO: Exchange[ExchangePattern:InOut, BodyType:com.access_commerce.cameleonws.cart.AddXMLResponse, Body:com.access_commerce.cameleonws.cart.AddXMLResponse@59dc73f9]
我猜我使用InOut模式或类似的东西有问题。
答案 0 :(得分:0)
删除processed()方法调用。它可以防止异常渗透到CXF端点。