Https Web服务调用失败

时间:2017-05-30 17:05:47

标签: java web-services soap websphere jax-ws

我们已经使用JAX-WS RI 2.1.6 in JDK 6实现了webservice调用现在当我们启用https webservice调用停止到达服务器并且java报告出现错误时出现问题,

  

javax.xml.ws.WebServiceException:java.io.IOException:Async IO   操作失败(3),原因:RC:55指定的网络资源   或设备不再可用。

现在我已在SoapUI内对此进行了测试,并在那里收到了服务的响应。

查看各种解决方案,它告诉我们提供超时设置,但似乎没有任何工作。

 @WebEndpoint(name = "RulesSoap")
    public RulesSoap getRulesSoap() {
        ((BindingProvider)super.getPort(new QName("urn:decision:Rules", "RulesSoap"), RulesSoap.class)).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 1000);
        ((BindingProvider)super.getPort(new QName("urn:decision:Rules", "RulesSoap"), RulesSoap.class)).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 1000);
        return super.getPort(new QName("urn:decision:Rules", "RulesSoap"), RulesSoap.class);
    }

仅供参考JAX-WS实现遵循以下几条简单的行, 当然我们将所有必要的数据提交到相应的存根中,但我没有在这里提交,因为我们的http电话正在通过,

Rules rules = new Rules(new URL(url), new QName("urn:decision:Rules", "Rules"));
RulesSoap rulesSoap = rules.getRulesSoap();
CorticonResponse response = rulesSoap.processRequest(request);

注意:我们的应用服务器WebSphere Application Server和版本7.0.0.19

先谢谢。

2 个答案:

答案 0 :(得分:1)

经过多方努力,我们解决了这个问题。如果发现与此相关的任何事情如何找到根本原因,我将提供步骤,

第1步: 首先,我们通过以下设置

WebSphere Application Server中启用了肥皂追踪
  

管理控制台>服务器>服务器类型> WebSphere Application Server>   {您的服务器}>疑难解答>更改日志详细信息级别>运行

在运行时请输入*=info: com.ibm.ws.websvcs.*=all: org.apache.axis2.jaxws.*=all

此步骤将在您的日志文件夹中创建trace.log文件。 现在,任何离开服务器的Web服务请求都会将日志添加到此文件以及端点,请求,响应等必要的道具。

第2步: 阅读我们在端点

后面找到的trace.log文件
PropertyValid 1 org.apache.axis2.jaxws.client.PropertyValidator validate validate property=(javax.xml.ws.service.endpoint.address) with value=(http://uxm.solutions.lnet.com:9445/axis/dswsdl/Rules/1/0)    
HTTPConnectio 3 resetConnection : http://uxm.solutions.lnet.com:9445/axis/dswsdl/Rules/1/0 Persistent : true

现在,如果您注意到我们的soap具有端点地址javax.xml.ws.service.endpoint.address,其中协议仍在使用http,这会导致ssl握手失败。

第3步: 解决方案是为了覆盖soap存根中的端点,可以通过添加以下行来实现

RulesSoap rulesSoap = rules.getRulesSoap();   
((BindingProvider)rulesSoap).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://uxm.solutions.lnet.com:9445/axis/dswsdl/Rules/1/0");

结论: 所以这就是我认为即使我们在创建对象时传递https url但仍未在运行时使用此https url,对我来说这看起来像JAX-WS的存根创建问题。

感谢。

答案 1 :(得分:0)

您使用的协议/密码是什么?您已经提到使用JDK6与WAS7上的webservice连接,而Java 6不支持TLS1.2(仅来自某个fixpack的TLS1.1)。

看到这个: How to use TLS 1.2 in Java 6