2012-11-06 55 views
2

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

如何调整Camel或CXF以获取故障信息,正如CXF自身收到的一样?

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

回答

5

你可以试试这个:

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

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

onException的(Fault.class).handled(真).process(新MyFaltProcessor ())。停止();

1

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