我正在写一个CXF客户端。现在我必须整合安全性。
我从wsdl2java生成这些类:MyService
,MyServiceProxy
,MyServiceHttpBindingStub
,MyServiceHttpService
和MyServiceHttpServiceLocator
。
到目前为止,我使用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()
?
答案 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();