【问题标题】:Https web service call failureHttps web服务调用失败
【发布时间】:2017-05-30 17:05:47
【问题描述】:

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

javax.xml.ws.WebServiceException: java.io.IOException: 异步 IO operation failed (3), reason: 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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    第 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");
    

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

    谢谢。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多