JAX-WS Reference Implementation をクライアントとして使う場合のネットワークタイムアウトの設定方法。

Yes, there is a new property on BindingProvider that you can use to set the timeout, the value is an Integer specified in
milliseconds
//Dispatch
dispatch.getRequestContext().put("com.sun.xml.ws.request.timeout", new Integer(5000));
//proxy
( (BindingProvider)proxy).getRequestContext().put("com.sun.xml.ws.request.timeout", new Integer(5000));

General JAX-WS usage questions
To set 20 secs timeout, do this
((BindingProvider)proxy).getRequestContext().set("com.sun.xml.ws.request.timeout", 20000)

This would result into URLConnection.setReadTimeout(int timeout)



java.net Forums : timeout ...

見た感じ、ConnectTimeout には対応してなくて ReadTimeout にのみ対応している模様。
たぶん、こんな感じのコードを書けばよさそう。


javax.xml.ws.BindingProvider provider; // do something
Map<String,Object> rc = provider.getRequestContext();
rc.put("com.sun.xml.ws.request.timeout", 1000); // 1000ms

com.sun.xml.ws.request.timeout を指定しない場合は、デフォルト あるいは システムプロパティ -Dsun.net.client.defaultReadTimeout の値が使われるっぽい。
また、ConnectTimeout は指定できないようなので、これもデフォルト値かシステムプロパティ -Dsun.net.client.defaultConnectTimeout で指定するしかなさげ。

詳細はこのへんから → JSR-000224 JAX-WS - Maintenance Release 2 ← ソースコードをダウンロードして確かめるぐらいか……

tags: zlashdot WebServices JAXWS Java

Posted by NI-Lab. (@nilab)