Https Web 服务调用失败



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

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

提前谢谢。

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

步骤1:首先,我们通过以下设置在WebSphere Application Server中启用肥皂跟踪,

管理控制台> 服务器> 服务器类型> WebSphere 应用程序服务器>{您的服务器}>>更改日志详细信息级别>

运行时进行故障排除

在运行时请把这个 ,*=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:解决方案是覆盖肥皂存根中的端点,这可以通过添加以下行来实现,

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

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

谢谢。

您使用什么协议/密码?您已经提到在 WAS7 上使用 JDK6 连接到 Web 服务,而 Java 6 不支持 TLS1.2(并且仅来自某些修订包的 TLS1.1)。

看到这个: 如何在Java 6中使用TLS 1.2

最新更新