我必须实现一个错误处理程序,该错误处理程序在发送SOAP请求并处理其响应的业务流程上使用Camel Redelivery Policy。在进程部分期间,可能会抛出一个特殊异常(RetryException)。在错误处理程序级别捕获此异常(感谢onException(RetryException.class))。 这很容易。
现在我想忽略cxf端点可能抛出的异常(如果每个示例出现连接错误)并处理它们。 所以我试试:
为了忽略cxf端点引发的异常,我实现了这样的路由(3):
public void configure() {
from(ROUTE_NAME).
.handleFault() // To handle Soap fault
.onException(Fault.class)
.continued(true)
.end()
.to("cxf:[...]")
;
}
它就像一个魅力,响应处理器在抛出RetryException之前执行一些检查......但是继续的指令抛弃了我之前拥有的有关重新传递的所有信息,Camel认为这个例外是第一个。所以这条路线进入了一种永久性的重试循环。
在 onException(错误)之前交换标题:
Headers: {breadcrumbId=ID-ITEM-S28636-63117-1469800853403-0-1, CamelRedelivered=true, CamelRedeliveryCounter=1, CamelRedeliveryMaxCounter=2, operationName=[...]}
在 onException(错误)之后交换标题:
Headers: {breadcrumbId=ID-ITEM-S28636-63117-1469800853403-0-1, operationName=[...]}
您是否有任何解决方案可以忽略某些子路由异常而不删除上层路由重试策略?
答案 0 :(得分:0)
我猜你是通过direct
端点连接路线;如果是这种情况,我认为您的主要问题是您将Fault
标记为继续,这意味着已处理,这很可能是导致您的重新传递标头被清除的原因。您可以尝试使用seda
或消息队列,而不是direct
端点,因为它基本上将您的路由链接到一个。