简体   繁体   English

未调用Apache CXF故障拦截器

[英]Apache CXF Fault Interceptor not invoked

I have a Mule Application which is using Apache CXF to consume an external web service. 我有一个使用Apache CXF消耗外部Web服务的Mule应用程序。

I am trying to register a Fault Interceptor as follows. 我正在尝试按以下方式注册故障拦截器。

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

Where faultOutInterceptor is ... faultOutInterceptor在哪里...

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

When a SOAP fault is thrown this interceptor is not being invoked. 引发SOAP错误时,不会调用此拦截器。 There are definitely other interceptors being invoked but unfortunately not mine. 肯定有其他拦截器被调用,但不幸的是不是我的。 See the log below... 请参阅下面的日志...

DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Chain org.apache.cxf.phase.PhaseInterceptorChain@10b0c88f 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 org.apache.cxf.interceptor.BareOutInterceptor@3a2f22eb
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor@4a09a8da
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.StaxOutEndingInterceptor@5d175938
DEBUG org.apache.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor@18c65fc3

Can someone help me with that I might be doing wrong? 有人可以帮我做错什么吗?

thanks 谢谢

I think you need to register an in Intercepter instead of out Intercepter something like below 我认为您需要注册一个拦截器,而不是注册拦截器,如下所示

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM