【问题标题】:Obtaining Endpoint for a CXF client for ws-security为 ws-security 获取 CXF 客户端的端点
【发布时间】:2012-01-12 11:20:26
【问题描述】:

我正在编写一个 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()?

【问题讨论】:

    标签: cxf


    【解决方案1】:

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

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

    【讨论】:

    • 前两行并不完全等同于以下行:MyService port = (new MyServiceHttpServiceLocator()).getMyServiceHttpPort();
    【解决方案2】:

    获取 SOAP 端口工作(不强制转换):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多