Jax-ws设置连接超时以读取wsdl和发送请求

mam*_*meo 6 java wsdl urlconnection jax-ws

我们的应用程序需要向SOAP服务发送一些请求.我们使用wsimport命令为我们的客户端生成类.但有时当服务停止或某些网络问题时,我们的请求会挂起,直到超时,这太长了.我们想控制超时值,所以我们尝试了几种方法.

对于调用服务方法,在阅读其他帖子后,我们设置如下:

((BindingProvider) port).getRequestContext().put("sun.net.client.defaultReadTimeout", 3000);
((BindingProvider) port).getRequestContext().put("sun.net.client.defaultConnectTimeout", 10000);
Run Code Online (Sandbox Code Playgroud)

但在此之前,我们必须调用get port来读取wsdl文件.我们尝试创建这样的URL:

url = new URL(null, "http://theirsite/WS?WSDL", new URLStreamHandler() {

    @Override
    protected URLConnection openConnection(URL url) throws IOException {
        logger.info("URLStreamHandler got call!");
        URL clone_url = new URL(url.toString());
        HttpURLConnection clone_connection
                = (HttpURLConnection) clone_url.openConnection();
        clone_connection.setConnectTimeout(5000);
        clone_connection.setReadTimeout(3000);
        return (clone_connection);
    }
});
Run Code Online (Sandbox Code Playgroud)

然后我们在创建Service对象时使用此url作为参数.但我们的URLStreamHandler从未接到电话.

我们甚至尝试设置这样的系统属性:

System.setProperty("sun.net.client.defaultReadTimeout", "" + 3000);
System.setProperty("sun.net.client.defaultConnectTimeout", "" + 5000);
Run Code Online (Sandbox Code Playgroud)

但到目前为止,对我们来说没什

所以any1可以帮我解决这个问题吗?还是有更好的方法?需要提一下的是,我们不想从本地读取wsdl文件.

jdd*_*lla 2

也许您使用的属性不正确。

试试这些:

((javax.xml.ws.BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout",
        Integer.valueOf(timeout));
((javax.xml.ws.BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout",
        Integer.valueOf(timeout));
Run Code Online (Sandbox Code Playgroud)

com.sun.xml.ws.request.timeout另外,请注意,和之间是有区别的com.sun.xml.internal.ws.request.timeout。当您使用 JDK JAX-WS 实现时,应该使用内部。

  • 抱歉,但我询问如何在读取 wsdl 文件时使请求超时,因为该请求在您获取端口之前运行。 (2认同)