【发布时间】:2017-01-30 21:08:19
【问题描述】:
我是 Camel 和 CXF 的新手。我正在尝试发布从我的 Web 服务抛出的错误消息。但是 CXF 仅将它们作为故障异常抛出,因此骆驼路由被中止并调用错误处理程序。
如何调整 Camel 或 CXF 以获取 CXF 本身接收到的故障消息?
- 是否有任何配置可以实现这一点?
- 或者我需要提供一个拦截器来实现这一点吗?
- 或者我需要在错误处理程序中处理吗?
【问题讨论】:
标签: cxf apache-camel
我是 Camel 和 CXF 的新手。我正在尝试发布从我的 Web 服务抛出的错误消息。但是 CXF 仅将它们作为故障异常抛出,因此骆驼路由被中止并调用错误处理程序。
如何调整 Camel 或 CXF 以获取 CXF 本身接收到的故障消息?
【问题讨论】:
标签: cxf apache-camel
你可以试试这个:
from("endpoint")
.doTry()
.to("endpoint")
.doCatch()
.process(new Processor(
@Override
public void process(Exchange exchange) throws Exception {
//Get the exception
SoapFault fault = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, SoapFault.class);
//Then you can change the body
}
))
.endDoTry()
.end();
【讨论】:
这是 spring DSL 中的示例路由。你可以试试这个。如果提供者有 SOAP 错误,这将完美地工作。
<route id="test-route-id">
<from uri="direct:from-route"/>
<doTry>
<log message="Request Payload : ${body}" loggingLevel="INFO" logName="test-route-id"/>
<to uri="direct:cxf-endpoint"/>
<log message="Response Payload : ${body}" loggingLevel="INFO" logName="test-route-id"/>
<doCatch>
<exception>org.apache.cxf.binding.soap.SoapFault</exception>
<to uri="direct:fault-handling-route"/>
</doCatch>
</doTry>
</route>
【讨论】:
如果你只想对错误做出反应,你可以这样做:
onException(Fault.class).handled(true).process(new MyFaltProcessor()).stop();
【讨论】: