【问题标题】:CXF SOAP Fault handlingCXF SOAP 故障处理
【发布时间】:2017-01-30 21:08:19
【问题描述】:

我是 Camel 和 CXF 的新手。我正在尝试发布从我的 Web 服务抛出的错误消息。但是 CXF 仅将它们作为故障异常抛出,因此骆驼路由被中止并调用错误处理程序。

如何调整 Camel 或 CXF 以获取 CXF 本身接收到的故障消息?

  1. 是否有任何配置可以实现这一点?
  2. 或者我需要提供一个拦截器来实现这一点吗?
  3. 或者我需要在错误处理程序中处理吗?

【问题讨论】:

    标签: cxf apache-camel


    【解决方案1】:

    你可以试试这个:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果你只想对错误做出反应,你可以这样做:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-29
          • 1970-01-01
          • 1970-01-01
          • 2016-08-30
          相关资源
          最近更新 更多