JAX-WS客户端和SocketTimeoutException与ConnectException

时间:2018-07-04 13:59:27

标签: java jboss jax-ws

我必须调用一个需要40秒才能响应的Web服务。我在JBoss-EAP 6.4中,使用以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
   xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
   <persistence-unit name="primary">
      <jta-data-source>java:jboss/datasources/library.backendDS</jta-data-source>
      <properties>
         <!-- Properties for Hibernate -->
         <property name="hibernate.hbm2ddl.auto" value="validate" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>
</persistence>

当超时时间小于20000(20秒)时,我得到了预期的异常:

IService svc = service.getBasicHttpBindingIService();
[...]
((BindingProvider) svc).getRequestContext().put("com.sun.xml.ws.connect.timeout",timeout)
[...]
svc.processMessage(req);

如果超时大于20000,则20秒后我又收到另一个例外:

HTTP transport error: java.net.SocketTimeoutException: connect timed out

因此,我无法从服务器获得响应(需要40秒响应),我总是收到异常。我必须增加哪种超时时间?

1 个答案:

答案 0 :(得分:0)

为什么要将超时时间设置为40秒?由“ com.sun.xml.internal.ws.connect.timeout”和“ com.sun.xml.internal.ws.request.timeout”表示两个超时。您可能已经连接到服务器,但是在这种情况下请求需要花费很长时间才能处理,后一种设置将生效。注意:我相信这些设置是针对JBoss的(我可能错了,请对其进行交叉检查)。