web-dev-qa-db-ja.com

jax-wsクライアントタイムアウトの設定

Jax-wsタイムアウトの設定に問題があります。私のコードは:

@WebServiceClient(name = "VoipDBJDBCService", targetNamespace = "http://db.server.voipmeter.jextreme.eu/", wsdlLocation = "http://trace0.nyc.blinkmind.com:8080/voipdb?wsdl")
public class VoipDBJDBCService extends Service {
    public VoipDBJDBCService(URL wsdlLocation) {
        super(wsdlLocation, new QName("http://db.server.voipmeter.jextreme.eu/", "VoipDBJDBCService"));
    }

    @WebEndpoint(name = "VoipDBJDBCPort")
    public VoipDB getVoipDBJDBCPort() {
        return super.getPort(new QName("http://db.server.voipmeter.jextreme.eu/", "VoipDBJDBCPort"), VoipDB.class);
    }
}

そして使用法:

VoipDB db = new VoipDBJDBCService(new URL(url)).getVoipDBJDBCPort();

タイムアウトをフックするにはどうすればよいですか?ここで「解決策」を見つけました: https://jax-ws.dev.Java.net/guide/HTTP_Timeouts.html しかし、どこにフックするかわかりません。プロキシを取得しますか? getPortを呼び出すと、クライアントは接続を試み、サーバーが応答しない場合は永久にハングします。

更新:このコードは、違いが生じる場合、アプレットのinit()メソッド内から呼び出されます。

12
Lukasz

Metro/Glassfishで...

//1 minute for connection
((BindingProvider) wsPort).getRequestContext().put("com.Sun.xml.ws.connect.timeout", 1 * 60 * 1000); 

//3 minutos for request
((BindingProvider) wsPort).getRequestContext().put("com.Sun.xml.ws.request.timeout", 3 * 60 * 1000); 
6

Sun JREを使用している場合は、デフォルトのネットワーク接続および読み取りタイムアウト(ミリ秒単位)に対して次のシステムプロパティを設定できます。私はこれらをJAX-WSクライアントで試したことがありませんが、そこでも機能するはずです。

Sun.net.client.defaultConnectTimeout
Sun.net.client.defaultReadTimeout

追加:アプレットでこれを行っているとあなたが言った質問の最後の部分を見逃しました。アプレットがデフォルトの権限で実行されている場合、システムプロパティを設定することはおそらく許可されていません。

1
jarnbjo
ProxyWs proxy = (ProxyWs) factory.create();
Client client = ClientProxy.getClient(proxy);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(0);
httpClientPolicy.setReceiveTimeout(0);
http.setClient(httpClientPolicy);

これは私のために働いた。

1
Daniel Kaplan

VoipDBオブジェクトをBindingProviderにキャストできます。したがって、指定したリンクの例では、proxydbに置き換えるだけで、準備は完了です。

0
musiKk

これが一例です

public void testConfigureTimeout() throws Exception
{
   //Set timeout until a connection is established
   ((BindingProvider)port).getRequestContext()
   .put("javax.xml.ws.client.connectionTimeout", "6000");

   //Set timeout until the response is received
   ((BindingProvider) port).getRequestContext()
   .put("javax.xml.ws.client.receiveTimeout", "1000");

    port.echo("testTimeout");
}
0
kumar saurav