chr*_*s01 1 java soap web-services jax-ws
我正在用Java调用Web服务。它运行良好,但我也想设置连接超时。
我的代码:
URL urlwsdl = new URL ("file://" + wsdl);
QName qn = new QName("http://myserver/myservice", "MyService");
port = new TimeSeriesService_Service (urlwsdl, qn).getMyServicePort ();
BindingProvider prov = (BindingProvider) port;
prov.getRequestContext ().put (BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://server1/myservice");
prov.getRequestContext ().put (BindingProvider.USERNAME_PROPERTY, "max");
prov.getRequestContext ().put (BindingProvider.PASSWORD_PROPERTY, "secret");
QueryRequest1 req = new QueryRequest1 ();
QueryResponse1 res = port.queryRequest1 (req); // *** TIMEOUT for ~2 minutes
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到了一些帖子。他们像我对http-auth一样使用绑定提供程序的上下文。
例如
prov.getRequestContext ().put ("com.sun.xml.ws.request.timeout", 1000000);
Run Code Online (Sandbox Code Playgroud)
但是它们使用的是我在命名空间中没有的对象。
例如
sun.net.client.defaultConnectTimeout
com.sun.xml.ws.connect.timeout
com.sun.xml.ws.request.timeout
Run Code Online (Sandbox Code Playgroud)
我有sun.net但没有.client。我有com.sun.xml,但没有.ws。
我有一个简单的Java JDK(1.7,Debian 8.3、64位),可以编译和运行我的Web服务,WebClient以及wsimport。没有安装netbeans,也没有安装jboss。
有什么想法可以设置超时时间吗?感谢帮助!克里斯
小智 5
使用JDK JAX-WS实现,您可能应该设置内部属性
((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", timeout);
((BindingProvider) port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", timeout);
Run Code Online (Sandbox Code Playgroud)
请升级我的JIRA问题,以在即将发布的JAX-WS版本https://java.net/jira/browse/JAX_WS-1166中标准化该问题