为ws-security获取CXF客户端的端点

我正在写一个CXF客户端.现在我必须整合安全性.

 我正在使用wsdl2
java生成这些类:MyService,MyServiceProxy,MyServiceHttpBindingStub,MyServiceHttpService和MyServiceHttpServiceLocator.

到目前为止,我使用MyServiceProxy类向服务发出请求.按照手册,我必须以某种方式获得一个端点,所以我可以这样做:

endpoint.getOutInterceptors().add(wssOut);

在手册中,使用ClientProxy帮助程序类解释如下:

Client client = ClientProxy.getClient(port);
Endpoint endpoint = client.getEndpoint();

但是如何从我的类中正确创建端口?当我做:

MyService port = (new MyServiceHttpServiceLocator()).getMyServiceHttpPort();

并将该端口放到ClientProxy方法,我得到一个运行时错误:

 java.lang.IllegalArgumentException: not a proxy instance

那么,我如何获得端口,以便我能够将它传递给ClientProxy.getClient()?

最佳答案 您是否尝试过创建服务实例,然后从该实例中检索端口?有一个示例说明如何在下面的Apache CXF链接中以另一种方式获取端口,标记为“记录消息 – 用于编程客户端日志记录”.请注意,根据您使用的CXF版本,步骤可能会有所不同.另一个建议是在您的情况下使用配置文件(如果可能).请参阅samples目录中的安全示例.

Debugging and Logging

 MyService ws = new MyService();
    MyPortType port = ws.getPort();

    Client client = ClientProxy.getClient(port);
点赞