我使用 Camel 作为客户端和 Web 服务之间的代理。目的是丰富客户端发送的传入 SOAP 请求,然后再将其转发到真正的Web 服务。
我想向生产者端点(真实 Web 服务的端点)注册一个名为sessionJAXWSHandler的 JAX-WS(协议)处理程序,但它似乎没有选择它。如果我在传入的 enpoint 上配置相同的处理程序,它会注册处理程序;我可以看到调试。我相信这里描述了同样的问题,但从未解决。
我基于 Spring 的 Camel 配置:
用于处理传入 SOAP 消息的 CXF 端点 - 处理程序注册得很好:
<cxf:cxfEndpoint id="hotelAvailabilityService"
address="/HotelAvailabilityService"
serviceClass="com.booking.hotel.availability.HotelAvailability"
wsdlURL="wsdl/MyHotelAvailabilityProxyService.wsdl">
<cxf:handlers>
<ref bean="sessionJAXWSHandler"/>
</cxf:handlers>
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
<entry key="schema-validation-enabled" value="false" />
</cxf:properties>
</cxf:cxfEndpoint>
传出请求的 CXF 端点(我看不到任何调试,所以我假设处理程序尚未注册。没有错误消息):
<cxf:cxfEndpoint id="realHotelAvailabilityService"
address="https://com.company.webservice/availabilityws"
wsdlURL="wsdl/hotelbooking.wsdl"
loggingFeatureEnabled="true"
>
<cxf:handlers>
<ref bean="sessionJAXWSHandler"/>
</cxf:handlers>
<cxf:inInterceptors>
<ref bean="unZip"/>
</cxf:inInterceptors>
<cxf:inFaultInterceptors>
<ref bean="unZip"/>
</cxf:inFaultInterceptors>
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
<entry key="schema-validation-enabled" value="false" />
</cxf:properties>
</cxf:cxfEndpoint>