无法使标准SSL客户端与axis2 Web服务一起使用

时间:2014-11-05 20:21:00

标签: java web-services web axis2 wsdl2java

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

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

它会生成所有必需的存根,但我实际上很难使用它们。我有两个URL都是HTTPS,但其中一个URL使用了rampart进行消息加密。我已经能够使更加困难的消息加密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时它就可以工作。

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

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,并将与其他任何使用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;

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