我必须调用一个需要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秒响应),我总是收到异常。我必须增加哪种超时时间?
答案 0 :(得分:0)
为什么要将超时时间设置为40秒?由“ com.sun.xml.internal.ws.connect.timeout”和“ com.sun.xml.internal.ws.request.timeout”表示两个超时。您可能已经连接到服务器,但是在这种情况下请求需要花费很长时间才能处理,后一种设置将生效。注意:我相信这些设置是针对JBoss的(我可能错了,请对其进行交叉检查)。