1

我有一些使用 Apache CXF 运行的 Web 服务,并使用 cxf:outInterceptors 注册了一个特定的自定义出站拦截器。此拦截器旨在在响应返回到 Web 服务客户端时执行。

<cxf:bus>
    <cxf:outInterceptors>
        <ref bean="myCustomInterceptorOutbound" />
    </cxf:outInterceptors>
    <cxf:inInterceptors>
    </cxf:inInterceptors>
    <cxf:features>
        <cxf:logging />
    </cxf:features>
</cxf:bus>

但是,如果我的一个 Web 服务最终调用了一个单独的远程 Web 服务,我不希望在这种情况下调用该出站拦截器。

有没有办法为 jaxws:client(或 JaxWsProxyFactoryBean)指定不同的拦截器配置,即告诉“不使用”通过 cxf:bus 注册的拦截器?还是我需要从 cxf:bus 中删除拦截器并在每个 jaxws:endpoint 上单独注册它?

4

1 回答 1

0

每个客户端/服务器单独添加拦截器。例如

<jaxws:client 
    serviceClass="no.bring.booking.Booking" 
    address="${bring.booking.webservice}" id="booking">
    <jaxws:inFaultInterceptors>
         <ref bean="loggingInInterceptor" />
    </jaxws:inFaultInterceptors>
    <jaxws:inInterceptors>
        <bean class="com.greenbird.xmlformatter.cxf.LoggingInInterceptor">
            <property name="prettyLogging" value="true" />
            <property name="prettyPrinter" ref="prettyPrinter" />
        </bean>
    </jaxws:inInterceptors>
    <jaxws:outInterceptors>
        <bean class="com.greenbird.xmlformatter.cxf.LoggingOutInterceptor">
            <property name="prettyLogging" value="true" />
            <property name="prettyPrinter" ref="prettyPrinter" />
        </bean>
    </jaxws:outInterceptors>
    <jaxws:outFaultInterceptors>
        <ref bean="loggingOutInterceptor" />
    </jaxws:outFaultInterceptors>       
</jaxws:client>

并通过将它们声明为 bean 来共享一些拦截器。

于 2015-04-30T10:53:53.037 回答