服务调用返回soap:fault时可以访问整个soap:body

时间:2018-09-10 15:45:08

标签: apache-camel cxf soapfault

我正在构建将SOAP请求发送到Web服务的路由。为此,我编写了这段代码。

.doTry()
    .inOut(getEndpointDocumentWS())
    .log("Response WHEN OKAY: ${body}")
    .process(Document_WS_REPLY_PROCESSOR)
.endDoTry()
.doCatch(Exception.class)
    .log(LoggingLevel.INFO, "SOAP REPLY WITH FAULTMESSAGE")
    .log("Response ON ERROR FAULT: ${body}")
    .process(Document_WS_REPLY_ERROR_PROCESSOR)
.end();

当服务响应为“正常”时,一切都会按计划进行。否则,当服务响应为soap:Fault时,我将无法访问所有响应(我正在使用soapUI来模拟soap:Fault响应)。

我可以通过获取EXCEPTION_CAUGHT属性来访问soap:fault的一小部分。 指示

.log("Response ON ERROR FAULT: ${body}")

完全没有数据。

我可以做些什么来访问所有的错误而不是仅错误字符串?

Exception exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,                 Exception.class);

1 个答案:

答案 0 :(得分:0)

根据此答案,Camel's CXF component not catching onException(Exception.class)

  

Camel的onException仅在出现异常时触发。 SOAP   故障以故障标志= true的消息表示。

     

您可以做的是在CamelContext上设置handleFault = true,然后   会将SOAP错误消息转换为onException的异常   可以做出反应。

假设您尚未配置handleFault=true,那么您的异常处理程序根本没有运行是很奇怪的。可能正在发生其他异常,而不是您要查找的Fault,这导致异常处理程序运行。

如果您已经配置了handleFault=true,除了在调试器中检查数据对象以查看是否可以发现正在发生的事情之外,我没有其他建议。 (如果您不知道,可以在异常处理程序中添加Processor并在Processor内插入一个断点。断点在路由定义中不起作用,因为路由定义是仅在初始化上运行。)