2017-05-24 2 views
0

Ich habe eine Mule-Anwendung, die Apache CXF verwendet, um einen externen Web-Service zu konsumieren.Apache CXF Fault Interceptor nicht aufgerufen

Ich versuche, einen Fault Interceptor wie folgt zu registrieren.

 <cxf:proxy-client payload="body" doc:name="SOAP">   
      <!-- outgoing interceptor chain for the client and an incoming chain for the cxf server --> 
      <cxf:outFaultInterceptors> 
       <spring:ref bean="faultOutInterceptor" /> 
      </cxf:outFaultInterceptors> 
     </cxf:proxy-client> 
     <spring:bean id="faultOutInterceptor" name="faultOutInterceptor" class="mypackage.soap.FaultOutInterceptor"/> 

Wo faultOutInterceptor ist ...

public class FaultOutInterceptor extends AbstractSoapInterceptor { 

    private static final Logger log = LoggerFactory.getLogger(FaultOutInterceptor.class); 

    public FaultOutInterceptor() { 
     super(Phase.USER_LOGICAL); 
    } 

    @Override 
    public void handleMessage(SoapMessage m) throws Fault { 
     log.info("Start in Fault Interceptor"); 
     log.info("SoapMessage Interceptor" + m); 
     Fault fault = (Fault) m.getContent(Exception.class); 
     log.info("Received fault response from error: " + fault); 
    } 
} 

Wenn ein SOAP-Fehler dieses Interceptor geworfen wird, wird nicht aufgerufen werden. Es werden definitiv andere Interzeptoren aufgerufen, aber leider nicht meine. Siehe unten stehendes Protokoll ...

DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Chain [email protected] was modified. Current flow: 
     setup [PolicyOutInterceptor, CopyAttachmentOutInterceptor] 
     pre-logical [OutputPayloadInterceptor, SoapHeaderOutFilterInterceptor] 
     post-logical [SoapPreProtocolOutInterceptor] 
     prepare-send [MessageSenderInterceptor] 
     pre-stream [AttachmentOutInterceptor, MuleProtocolHeadersOutInterceptor, StaxOutInterceptor, org.mule.module.cxf.transport.MuleUniversalConduit$2] 
     pre-protocol [MuleHeadersOutInterceptor] 
     write [SoapOutInterceptor] 
     marshal [BareOutInterceptor] 
     write-ending [SoapOutEndingInterceptor] 
     pre-stream-ending [StaxOutEndingInterceptor] 
     prepare-send-ending [MessageSenderEndingInterceptor] 

DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor [email protected] 
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.bindi[email protected]4a09a8da 
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.StaxOutEnding[email protected] 
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.inte[email protected]18c65fc3 

Kann mir jemand dabei helfen, dass ich etwas falsch mache?

dank

Antwort

0

Ich glaube, Sie brauchen eine statt aus Intercepter etwas in Intercepter registrieren wie unten

<cxf:jaxws-client serviceClass="com.mulesoft.example.HelloWorld" 
    operation="sayHello" port="HelloWorldPort"> 
    <cxf:inInterceptors> 
     <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/> 
    </cxf:inInterceptors> 
</cxf:jaxws-client>