我正在构建一个向Web服务发送SOAP请求的路由。为实现这一目标,我编写了这段代码。
.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}")
根本没有数据。
我可以做些什么来访问所有而不是只有faulttring?
异常异常= exchange.getProperty(Exchange.EXCEPTION_CAUGHT,Exception.class);
根据这个答案,Camel's CXF component not catching onException(Exception.class):
如果有异常,Camel的onException只有triggeres。 SOAP Fault表示为具有fault flag = true的Message。
你可以做的是在CamelContext上设置handleFault = true,然后它会将SOAP错误消息转换为onException可以响应的异常。
假设你没有配置handleFault=true
,那么奇怪的是你的异常处理程序正在运行。可能是某些其他异常,而不是您正在寻找的故障,正在发生,导致异常处理程序运行。
如果您已经配置了handleFault=true
,除了检查调试器中的数据对象以查看是否可以找到正在发生的事情之外,我没有任何建议。 (如果您不知道,为此,您可以将Processor
添加到异常处理程序并在Processor
中插入断点。断点在路由定义中不起作用,因为路由定义仅在初始化时运行。)