如何设置JAX-WS客户端超时?

时间:2012-12-24 11:54:16

标签: java web-services java-ee jboss jax-ws

我正在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没有任何效果


你能告诉我如何正确设置客户端超时吗?

3 个答案:

答案 0 :(得分:1)

我执行了以下步骤并修复了问题

  1. 升级 jbossws-native 库,follow this link
    jbossws-native-3.4.0是Jboss 5.1.0GA的最新支持版本。您可以看到JBossWS - Supported Target Containers

  2. 已使用StubExt.PROPERTY_CLIENT_TIMEOUT

    int timeoutMillisecond=3000;
    bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
    
  3. 顺便说一下,在这个版本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);