2

Jboss5.1.0GAでJax-wsクライアントを開発しています。Webサービスクライアントのタイムアウトを設定したい。

StubExt.PROPERTY_CLIENT_TIMEOUTを試しました。

int timeoutMillisecond=3000;
bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);

動作しますが、例外は3 * timeoutMillisecond後(9000ミリ秒後)にのみスローされますが、3000msはログファイルに書き込まれます。

2012-12-24 15:42:40,053 DEBUG Sending request
2012-12-24 15:42:49,057 ERROR WebServiceException returned: 
javax.xml.ws.WebServiceException: org.jboss.ws.core.WSTimeoutException: Timeout after: 3000ms

私は他の多くの方法も試しました

bp.getRequestContext().put("com.sun.xml.ws.connect.timeout", 100);
bp.getRequestContext().put("com.sun.xml.ws.request.timeout", 100);
// from com.sun.xml.ws.developer.JAXWSProperties
bp.getRequestContext().put(JAXWSProperties.CONNECT_TIMEOUT, 100);
bp.getRequestContext().put(JAXWSProperties.REQUEST_TIMEOUT, 100);

しかし、Jboss5.1では何も機能しませんでした


クライアントのタイムアウトを正しく設定する方法を教えてください。

4

3 に答える 3

1

次の手順を実行して、問題を修正しました

  1. アップグレードされた jbossws-nativeライブラリは、このリンクに従ってください
    jbossws-native-3.4.0 は、Jboss 5.1.0GA でサポートされている最新バージョンです。JBossWS - サポートされているターゲット コンテナーを確認できます。

  2. 使用済みStubExt.PROPERTY_CLIENT_TIMEOUT

    int timeoutMillisecond=3000;
    bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, timeoutMillisecond);
    

ちなみに、このバージョンでStubExt.PROPERTY_CONNECTION_TIMEOUTも正常に動作します。

于 2012-12-25T12:07:19.690 に答える
0

これらの設定をサービスポートに使用できます。

BindingProvider bindingProvider = (BindingProvider) YOUR_SERVICE_PORT;
Map<String, Object> context = bindingProvider.getRequestContext();
context.put(BindingProviderProperties.CONNECT_TIMEOUT, 3*1000);
context.put(BindingProviderProperties.REQUEST_TIMEOUT,3*1000);
于 2012-12-24T13:29:53.660 に答える
0

ポイントチェックアウトコードが完全に欠落しています:

URL url = 新しい URL(" http://tst.com:9990/ws/hello?wsdl ");

    //1st argument service URI, refer to wsdl document above
//2nd argument is service name, refer to wsdl document above
    QName qname = new QName("http://tstsoap/", "HelloWorldImplService");

    Service service = Service.create(url, qname);

   HelloWorld hello = service.getPort(HelloWorld.class);

ご覧のとおり、最初にサービスを作成しないとポートを取得できません。
そのため、タイムアウトは常にサービスの作成時に発生します。したがって、ポートの時間を設定することは無意味です.......誰かがサービスのタイムアウトについて何かを投稿する必要があります....ポートのタイムアウトではありません....誰かが私が間違っていることを証明できない限り....

于 2013-08-06T13:25:34.377 に答える