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

Java 如何设置JAX-WS客户端超时?,java,web-services,jakarta-ee,jboss,jax-ws,Java,Web Services,Jakarta Ee,Jboss,Jax Ws,我正在JBoss5.1.0GA上开发Jax ws客户端。 我想设置web服务客户端超时 我尝试了StubExt.PROPERTY\u CLIENT\u TIMEOUT int timeoutMillisecond=3000; bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond); 它可以工作,但只有在3*timeoutmillished之后(9000毫秒之后)才会引发异常,但3000ms会

我正在JBoss5.1.0GA上开发Jax ws客户端。 我想设置web服务客户端超时

我尝试了StubExt.PROPERTY\u CLIENT\u TIMEOUT

int timeoutMillisecond=3000;
bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
它可以工作,但只有在3*timeoutmillished之后(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);
但是在JBoss5.1上什么都不起作用


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

您可以使用服务端口的设置

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);
BindingProvider BindingProvider=(BindingProvider)您的\u服务\u端口;
映射上下文=bindingProvider.getRequestContext();
put(BindingProviderProperties.CONNECT\u超时,3*1000);

put(BindingProviderProperties.REQUEST\u超时,3*1000);
我执行了以下步骤,并解决了问题:

  • 升级了jbossws本机库
    jbossws-native-3.4.0是Jboss 5.1.0GA支持的最新版本。你可以看到

  • 已使用
    StubExt.PROPERTY\u CLIENT\u超时

    int timeoutMillisecond=3000;
    bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
    

  • 顺便说一句,在此版本中,
    StubExt.PROPERTY\u CONNECTION\u TIMEOUT
    也可以正常工作。

    您完全没有签出点代码:

    URL=新URL(“”)

    如您所见,如果不先创建服务,就无法获得端口。
    因此,超时总是发生在服务创建时。 因此,为端口设置时间是毫无意义的。。。。。。。 有人需要发布一些关于服务超时的信息…而不是端口超时。。。。
    除非有人能证明我错了……

    BindingProviderProperties.REQUEST\u TIMEOUT的可能重复项是“com.sun.xml.ws.REQUEST.TIMEOUT”的变量名,BindingProviderProperties.CONNECT\u TIMEOUT是“com.sun.xml.ws.CONNECT.TIMEOUT”的变量名,OP已经尝试过了,但没有成功。
        //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);