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

时间:2012-01-12 11:20:26

标签: 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()

2 个答案:

答案 0 :(得分:1)

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

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

    Client client = ClientProxy.getClient(port);

答案 1 :(得分:1)

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

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