获取用于ws安全性的CXF客户端的端点



我正在编写一个CXF客户端。现在我必须集成安全性。我有从wsdl2java生成的这些类:MyServiceMyServiceProxyMyServiceHttpBindingStubMyServiceHttpServiceMyServiceHttpServiceLocator

到目前为止,我一直使用MyServiceProxy类来向服务发出请求。根据手册,我必须以某种方式获得Endpoint,这样我才能做到这一点:

endpoint.getOutInterceptors().add(wssOut);

在手册中,它是通过使用ClientProxy助手类来解释的,如下所示:

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

但是如何从我的类中正确地创建port呢?当我这样做时:

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

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

 java.lang.IllegalArgumentException: not a proxy instance

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

您是否尝试创建服务的实例,然后从该实例检索端口?下面的"Logging Messages-for programming client side Logging"一节中有一个示例,说明如何在Apache CXF链接中以另一种方式获取端口。请注意,根据您使用的CXF的版本,步骤可能会有所不同。如果可能的话,另一个建议是使用配置文件。请参阅samples目录中的安全示例。调试和记录

 MyService ws = new MyService();
    MyPortType port = ws.getPort();
    Client client = ClientProxy.getClient(port);

获取SOAP端口有效(无强制转换):

MyService service= new MyService(SERVICE_URL, SERVICE_NAME);
Operation port = service.getMyServiceSOAP12Port();
Client client = ClientProxy.getClient(port);
Endpoint cxfEndpoint = client.getEndpoint();

最新更新