我有一个使用 CXF 的 Servlet 传输和 Jetty 6.1 提供服务的应用程序。此应用程序还需要使用外部服务。所有服务都支持 WS-Addressing 规范(以及顶部的 WS-RM)。为了使用外部服务,我从应用程序运行生成的服务客户端。
问题是,当我为客户端提供解耦端点(WS-RM 需要此端点通过单独的 http 连接接收传入消息)时,CXF 运行另一个 Jetty 服务器实例(尽管 Servlet 传输(它提供服务)和客户端(消耗一些外部服务)共享同一总线)。我不需要两个 Jetty 实例(并不是说它们不能在同一个 HTTP 端口上运行)。
有没有办法可以使用现有的 Jetty 服务器和 Servlet 传输来提供解耦端点?
到目前为止,我启用了一个像这样的解耦端点:
Client client = ClientProxy.getClient(port);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
httpConduit.getClient().setDecoupledEndpoint(
"http://domain.com:port/services/dec_endpoints/TestDecEndpoint");
如果我提供相对路径(“/dec_endpoints/TestDecEndpoint”,就像通过 Servlet 传输提供服务时使用相对路径一样),HTTP 管道不会在 SOAP 消息的标头中指定完整路径,因此这也不起作用(服务器无法向 /dec_endpoints/TestDecEndpoint 发送消息)。