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)