-1

我有一条以 cxf 端点开头的路由,如下所示:

<cxf:cxfEndpoint id="CXFTest" address="/javainuse/learn"
                 endpointName="a:SOATestEndpoint" serviceName="a:SOATestEndpointService"
                 serviceClass="com.javainuse.SOATestEndpoint"
                 xmlns:a ="http://javainuse.com">
    <cxf:binding>
        <soap:soapBinding mtomEnabled="false" version="1.2" />
    </cxf:binding>

    <cxf:features>
        <wsa:addressing  xmlns:wsa="http://cxf.apache.org/ws/addressing"/>
    </cxf:features>
    <cxf:inInterceptors>
        <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
        <bean class="org.apache.cxf.ws.security.wss4j.DefaultCryptoCoverageChecker" />
        <ref bean="TAXWSS4JInInterceptorBean" />            
    </cxf:inInterceptors>
    <cxf:inFaultInterceptors>
        <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
        <bean class="org.apache.cxf.ws.security.wss4j.DefaultCryptoCoverageChecker" />            
        <ref bean="TAXWSS4JInInterceptorBean" />            
    </cxf:inFaultInterceptors>
    <cxf:outInterceptors>
        <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />
        <ref bean="TAXWSS4JOutInterceptorBean" />
    </cxf:outInterceptors>
    <cxf:outFaultInterceptors>
        <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />
        <ref bean="TAXWSS4JOutInterceptorBean" />
    </cxf:outFaultInterceptors>
</cxf:cxfEndpoint>


<camelContext xmlns="http://camel.apache.org/schema/spring">
    <camel:route>
        <camel:from uri="cxf:bean:CXFTest" />
        <to uri="bean:processor"/>
    </camel:route>
</camelContext>

我有几个在其中处理的输出拦截器。现在当路由完成时,输出拦截器的响应交叉,但我想在处理输出拦截器后将我的消息发送到队列。我怎样才能做到这一点?

4

1 回答 1

1

您的 Camel 路由不能,因为输入和输出拦截器被 CXF “包裹”在您的客户端或服务器实现中。根据设计,端点实现(您的 Camel 路由)不需要关心它们。

如果要在第一个拦截器之前操作请求或在最后一个拦截器之后操作响应,则必须自己实现一个作为第一个/最后一个拦截器运行的 CXF 拦截器。

in 和 out有多个阶段,您可以将拦截器附加到,以告诉 CXF 何时执行它。

于 2019-08-26T07:56:24.407 回答