处理异常时Apache Camel CXF为空响应

时间:2011-09-16 14:47:12

标签: exception-handling cxf apache-camel

此问题与前一个问题有关: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模式或类似的东西有问题。

1 个答案:

答案 0 :(得分:0)

删除processed()方法调用。它可以防止异常渗透到CXF端点。