【问题标题】:Java SOAP/JAX-WS: How to set timeouts?Java SOAP/JAX-WS:如何设置超时?
【发布时间】:2016-04-05 09:28:50
【问题描述】:

我正在使用 Java 调用 Web 服务。它运行良好,但我也想设置连接超时。

我的代码:

URL urlwsdl = new URL ("file://" + wsdl);
QName qn = new QName("http://myserver/myservice", "MyService");
port = new TimeSeriesService_Service (urlwsdl, qn).getMyServicePort (); 

BindingProvider prov = (BindingProvider) port;
prov.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://server1/myservice");
prov.getRequestContext ().put (BindingProvider.USERNAME_PROPERTY, "max");
prov.getRequestContext ().put (BindingProvider.PASSWORD_PROPERTY, "secret");

QueryRequest1 req = new QueryRequest1 ();
QueryResponse1 res = port.queryRequest1 (req);  // *** TIMEOUT for ~2 minutes

我在网上找到了一些帖子。他们使用绑定提供者的上下文,就像我对 http-auth 所做的那样。

例如

prov.getRequestContext ().put ("com.sun.xml.ws.request.timeout", 1000000);

但他们使用我的命名空间中没有的对象。

例如

sun.net.client.defaultConnectTimeout
com.sun.xml.ws.connect.timeout
com.sun.xml.ws.request.timeout

我有 sun.net 但没有 .client。 我有 com.sun.xml 但没有 .ws。

我有一个简单的 java jdk(1.7,Debian 8.3,64 位),可以编译和运行我的 web 服务、webclient 和 wsimport。没有安装 netbeans 和 jboss。

任何想法如何设置超时? 感谢帮助! 克里斯

【问题讨论】:

    标签: java web-services soap jax-ws


    【解决方案1】:

    使用 JDK JAX-WS 实现,您可能应该设置内部属性

     ((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", timeout);
     ((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", timeout);
    

    请投票支持我的 JIRA 问题,以便在即将发布的 JAX-WS 版本中对此进行标准化 https://java.net/jira/browse/JAX_WS-1166

    【讨论】:

    • 我有 com.sun.xml.internal.ws 但没有连接。我需要在 JDK 之外的外部 JAR 吗?
    • 没有你需要的一切都在 JDK 中。检查com.sun.xml.internal.ws.developer.JAXWSProperties 类,看看你有完全相同的值。
    • 我收到此错误:由于对所需库 /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar 的限制,无法访问类型 JAXWSProperties
    • 您应该始终避免使用 com.sun 包中的类。我的建议只是您查看 JDK 中定义的常量字段。然后你应该把它复制到你的代码中。
    • @Willem Salembier 指向的页面已移至此处github.com/javaee/metro-jax-ws/issues/1166
    【解决方案2】:

    还有一个。此处或相关帖子中提到的选项都不适合我。真是一团糟……

     ((BindingProvider) port).getRequestContext().put(org.apache.axis2.transport.http.HTTPConstants.CONNECTION_TIMEOUT, 3000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-07
      • 2011-03-09
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2010-10-24
      • 2012-04-16
      • 2016-08-23
      相关资源
      最近更新 更多