2012-11-06 2 views
2

Camel 및 CXF를 처음 사용합니다. 내 웹 서비스에서 던져진 오류 메시지를 게시하려고합니다. 그러나 CXF는 오류 예외로만이를 throw하므로 낙타 라우팅이 중단되고 오류 처리기가 호출됩니다.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>