【问题标题】:Unable to get standard SSL client to work with axis2 web service无法让标准 SSL 客户端与 axis2 Web 服务一起使用
【发布时间】:2014-11-05 20:20:59
【问题描述】:

好吧,我有一个带有 web 方法的 wsdl,我使用以下命令通过 axis2java 创建存根:

wsdl2java -uri https://path/to/service?wsdl -p com.my.java.package

它会生成所有必需的存根,但我很难实际使用它们。我有两个 HTTPS 的 URL,但是其中一个具有带壁垒的消息加密。我已经能够让更困难的消息加密 URL 正常工作。

我按如下方式初始化我的加密存根:

ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("repository", null);

NetWS_0Stub stub = new NetWS_0Stub(ctx, aEndPoint);
ServiceClient client = stub._getServiceClient();

Options options = new Options();
options.setTo(new EndpointReference(aEndPoint));
options.setProperty(RampartMessageData.KEY_RAMPART_POLICY,  this.loadPolicy("repository/policy/HTTPS_Policy.xml"));
client.setOptions(options);
client.engageModule("rampart");

return stub;

对于我的非加密(仅限 HTTPS),我尝试了上述存根初始化方法以及以下方法:

ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("repository", null);

NetWS_0Stub stub = new NetWS_0Stub(ctx, aEndPoint);
ServiceClient client = stub._getServiceClient();

Options options = new Options();
options.setTo(new EndpointReference(aEndPoint));
client.setOptions(options);

普通的 HTTPS 存根不起作用。充其量我得到一个肥皂头丢失异常。但是,我可以通过 SOAPui 使用这些 Web 方法。所以我知道 URL/WSDL/web 方法运行良好。我更熟悉 wsimport 而不是axis2 ....axis2 似乎更难做这么简单的事情。

我应该如何设置存根来调用非消息加密的 Web 服务?为什么使用axis2如此痛苦?这只是我不理解的问题。如果 SOAPui 可以立即生成 Web 请求/响应,那么我觉得 axis2 工具应该能够做同样的事情,特别是因为 Web 方法是通过 glassfish 中的 axis2 创建和访问的。我没有使用任何密钥库/信任库设置 SOAPui,当我给它 wsdl 时它就可以工作。

如果有人需要特定的代码示例,请告诉我,我不确定哪些信息甚至可以帮助某人帮助我。

【问题讨论】:

    标签: java web-services web axis2 wsdl2java


    【解决方案1】:

    我找到了一个解决方案,并将分享给正在使用axis2的任何其他不幸的人。

    ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem("repository", null);
    
    NetWS_0Stub stub = new NetWS_0Stub(ctx, aEndPoint);
    ServiceClient client = stub._getServiceClient();
    
    Options options = new Options();
    options.setTo(new EndpointReference(aEndPoint));
    //Added chunking property:
    options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
    client.setOptions(options);
    //Engaged rampart module:
    client.engageModule("rampart");
    
    return stub;
    

    以上是对我有用的神奇组合。将壁垒模块重新添加到其中给了我一个分块异常,并且在添加了有关分块的属性之后,它就起作用了。我不确定我连接到的这个特定的 Web 服务是否有需要上述配置的特殊设置,但获得完美组合非常令人沮丧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多