我正在Jboss 5.1.0 GA上开发Jax-ws客户端。 我想设置Web服务客户端超时。
我尝试过 StubExt.PROPERTY_CLIENT_TIMEOUT 。
int timeoutMillisecond=3000;
bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
它可以工作,但只有在 3 * timeoutMillisecond (9000毫秒之后)之后抛出异常,但是在日志文件中写入了3000ms。
2012-12-24 15:42:40,053 DEBUG Sending request
2012-12-24 15:42:49,057 ERROR WebServiceException returned:
javax.xml.ws.WebServiceException: org.jboss.ws.core.WSTimeoutException: Timeout after: 3000ms
我还有许多其他方式
bp.getRequestContext().put("com.sun.xml.ws.connect.timeout", 100);
bp.getRequestContext().put("com.sun.xml.ws.request.timeout", 100);
// from com.sun.xml.ws.developer.JAXWSProperties
bp.getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, 100);
bp.getRequestContext().put(JAXWSProperties.REQUEST_TIMEOUT, 100);
但Jboss 5.1没有任何效果
你能告诉我如何正确设置客户端超时吗?
答案 0 :(得分:1)
我执行了以下步骤并修复了问题:
升级 jbossws-native 库,follow this link。
jbossws-native-3.4.0是Jboss 5.1.0GA的最新支持版本。您可以看到JBossWS - Supported Target Containers
已使用StubExt.PROPERTY_CLIENT_TIMEOUT
int timeoutMillisecond=3000;
bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
顺便说一下,在这个版本StubExt.PROPERTY_CONNECTION_TIMEOUT
中也可以正常工作。
答案 1 :(得分:1)
你完全错过了点检查代码:
网址网址=新网址(“http://tst.com:9990/ws/hello?wsdl”);
//1st argument service URI, refer to wsdl document above
//2nd argument is service name, refer to wsdl document above
QName qname = new QName("http://tstsoap/", "HelloWorldImplService");
Service service = Service.create(url, qname);
HelloWorld hello = service.getPort(HelloWorld.class);
正如您所看到的,如果没有先创建服务,就无法获得端口 因此,超时总是在创建服务时发生。 所以为港口设定时间是没有意义的....... 有人需要发布一些关于服务超时的信息....而不是端口超时.... 除非有人能证明我错了......
答案 2 :(得分:0)
您可以对服务端口使用these设置。
BindingProvider bindingProvider = (BindingProvider) YOUR_SERVICE_PORT;
Map<String, Object> context = bindingProvider.getRequestContext();
context.put(BindingProviderProperties.CONNECT_TIMEOUT, 3*1000);
context.put(BindingProviderProperties.REQUEST_TIMEOUT,3*1000);