CXF SOAP故障处理

时间:2012-11-06 12:29:06

标签: cxf apache-camel

我是Camel和CXF的新手。我试图发布处理从我的Web服务抛出的错误消息。但CXF仅将它们作为Fault异常抛出,因此中止了camel路由并调用了错误处理程序。

如何调整Camel或CXF以获得与CXF本身一样的错误消息?

  1. 我有什么配置可以达到这个目的吗?
  2. 或者我是否需要提供拦截器来实现这一目标?
  3. 或者我需要处理错误处理程序吗?

3 个答案:

答案 0 :(得分:4)

你可以试试这个:

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();

答案 1 :(得分:1)

这是Spring DSL中的示例路由。你可以试试这个。如果提供程序存在SOAP Fault,这将完美地工作。

<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>

答案 2 :(得分:0)

如果您只想对故障做出反应,您可以这样做:

onException(Fault.class).handled(true).process(new MyFaltProcessor())。stop();