Web サービス・クライアント・ランタイムのトラブルシューティングのヒント
これらのヒントを使用して、Web サービス・クライアントをトラブルシューティングします。
このトピックの各セクションでは、Web サービス・クライアントのランタイム中に発生する可能性のある問題を取り上げます。 また、それらの問題のトラブルシューティングに役立つ解決策が 提示されています。
ASYNC_TIMEOUT_MILLISECONDS プロパティーを使用して、JAX-WS 同期クライアントのタイムアウト例外の受け取りを回避します。
((BindingProvider) port).getRequestContext().put(com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, 30000);
リモート・ホストへの接続に失敗する
- エラー・メッセージにリストされたホスト名が正しいホスト名である場合、Web サービスのアプリケーションが実行中であり、使用可能であることを確認する必要があります。
- エラー・メッセージにリストされたホスト名が誤ったホスト名である場合、Web サービスの WSDL ファイルの更新か、またはホスト名で使用する必要のあるエンドポイント URL のオーバーライドが必要になることがあります。 Web サービス・エンドポイント URL をオーバーライドするには、『Web サービス・クライアント・バインディングの構成』の情報を参照し、ポート情報の構成方法を確認してください。
Solaris 環境の ibm-jaxrpc-client.jar ファイルで Web サービス・クライアントを実行すると、 例外が発生することがある
java -jar <your_client_application>.jar, <main_class_file>
この問題が発生するのは、Sun の JDK クラス・ロード仕様が IBM® の JDK 仕様より厳密であるためです。
- -jar オプションではなく -classpath オプションを使用します。
以下に例を示します。
java -jar <java_application>.jar, <main_class_file >
- -jar オプションと同時に -Djava.ext.dirs オプションも使用します。
以下に例を示します。
export WAS_HOME=/opt/IBM/WebSphere/AppServer ${WAS_HOME}/java/jre/bin/java -Djava.ext.dirs=${WAS_HOME}/runtimes -jar <your_client_application>.jar, <your_client_application>.args
- Manifest.MF のクラスパスを、必要な Java アーカイブ (JAR) ファイルを含むように
変更します。以下に例を示します。
Class Path: /opt/IBM/WebSphere/AppServer/runtimes/ibm-jaxrpc-client.jar
HTTP を使用してプライベート IP アドレスに基づかない サービス・エンドポイント・インターフェースに接続する際に、DNS の解決でパフォーマンス上の問題が生じる
HTTP を使用してプライベート IP アドレスに基づかないサービス・エンドポイント・インターフェースに 接続する際に、DNS サービスが利用できないことがあります。 したがって、DNS の解決中はパフォーマンスが低下します。
この問題は、 Web サービス・エンジンのアウトバウンド HTTP コネクターがホスト・アドレス名を解決しようとして タイムアウトになった場合に起こります。
ターゲット IP アドレスの HOSTS ファイルを変更して、DNS 解決を行わないようにすることができます。
ランタイム・マイグレーション・エラー
WSWS3701E: エラー: 例外が発生しました。Use wsdeploy to deploy your application.
This might correct the problem. The exception is <exception data>.
この例外は、6 より古いバージョンがサポートしているツールで開発された アプリケーションの実行中に問題が発生したことを示しています。 アプリケーションをアンインストールして、wsdeploy コマンドを実行後、 アプリケーションを再デプロイすることで問題は解決します。
wsdeploy コマンドは、 Java API for XML-based RPC (JAX-RPC) アプリケーションによってサポートされます。 アプリケーション・サーバーによって実装される Java API for XML-Based Web Services (JAX-WS) プログラミング・モデルは、 wsdeploy コマンドをサポートしていません。 Web サービス・アプリケーションに JAX-WS エンドポイントのみが含まれる場合、このコマンドは JAX-RPC エンドポイントの処理のみに使用されるため、wsdeploy コマンドを実行する必要はありません。
特定の Web サービス記述言語 (WSDL) ファイルのアプリケーション・サーバー・ランタイム中に、 WebServicesFault 例外が表示される
文書体裁とリテラル使用による操作を定義し、 SOAP ヘッダーを使用して入力データを送信する WSDL ファイルのアプリケーション・サーバー・ランタイム中に、 WebServicesFault 例外が表示されます。
WSDL ファイルが、文書体裁とリテラル使用による操作を定義し、 この操作によって入力データを SOAP ヘッダーにマップする場合に、 Web サービス・ランタイムがターゲット・サービスについての的確な操作の検出に失敗し、 WebServicesFault 例外が表示されます。
この問題を解決するには、 その操作で、SOAP ヘッダーを使用してデータを送信する入力データがないように、 WSDL ファイルを変更します。
ConnectionIOTimeOut パラメーターの値を大きくして、Web サービスをホスティングする際に例外を受け取ることを避ける
WebSphere Application Server 上で Web サービスをホスティングする際に、java.net.SocketTimeOutException: Read Timed Out という例外が表示される場合があります。
クライアントと Web サービス間のネットワーク接続が低速であるため、この問題が発生します。 このような場合、Web サービス・エンジンが SOAP 要求の読み取りを完了する前に、 HTTP ソケットがタイムアウトになる場合があります。この問題の原因は、ほとんどの場合、 ネットワーク全体のアクティビティーが急に増大したためです。 この問題は、クライアントが低速ネットワーク接続から Web サービスにアクセスしている場合や、 SOAP 要求のデータ量が大きい状況でも発生することがあります。
- 名前: ConnectionIOTimeOut
- 値: 30
syncTimeout パラメーターの値を大きくして、Web サービス・クライアントをホスティングする際に例外を受け取ることを避ける
Web サービス・クライアントによって使用される syncTimeout パラメーターが正しく設定されていない場合、「java.net.SocketTimeOutException: 読み取りタイムアウト」というエラーが発生することもあります。 トピック「HTTP トランスポート・カスタム・プロパティー」で述べられているようにタイムアウトを回避しようとして ConnectionIOTimeout パラメーターをゼロに設定した場合、接続タイムアウトのみが回避されるので、このことに注意する必要があります。 HTTP クライアント (Web サービス・クライアントも可) からの要求が、タイムアウトにならないようにする唯一の方法は、syncTimeout パラメーターの設定値を大きくすることです。
syncTimeout パラメーターは、Web サービス・クライアントでのみ使用されます。このパラメーターを、Web サービス呼び出しのタイムアウトである Web サービス・スタブに設定することができます。
この問題を解決するには、Web サービス・クライアントの syncTimeout パラメーターを大きくします。このパラメーターの設定方法については、『ibm-webservicesclient-bnd.xmi デプロイメント記述子での JAX-RPC Web サービス・クライアント・バインディングの構成』の情報を参照してください。
セッション・パーシスタンスをオンにして Web サービス・クライアント・アプリケーションを実行するか、クラスター環境で Web サービス・クライアント・アプリケーションを実行すると、WebServicesFault エラーが生じる場合がある
[mm/dd/yy hh:mm:ss:ttt EST] 0000006e SystemErr R WebServicesFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultString: java.io.IOException: Connection close: Read failed.Possible end of
stream encountered.
faultActor: null
faultDetail:
このエラーは、次の 2 つの方法のどちらかを実行して回避することができます。- com.ibm.websphere.webservices.http.requestResendEnabled プロパティーを true に設定します。例えば、com.ibm.websphere.webservices.http.requestResendEnabled=true とします。このプロパティーを true に設定すると、Web サービス・クライアントは要求が失敗した場合にその要求を再送するようにプログラムされます。要求が 2 回送信される場合があるため、プロパティー値を変更する場合はクライアントのランタイムをモニターします。
例えば、クライアントが銀行用アプリケーションで、com.ibm.websphere.webservices.http.requestResendEnabled プロパティーを true に設定してある場合、トランザクションが口座に 2 回記入される場合があります。 com.ibm.websphere.webservices.http.requestResendEnabled プロパティーを構成する方法については、『管理コンソールの JVM カスタム・プロパティー・パネルを使用した追加の HTTP トランスポート・プロパティーの構成』の情報を参照してください。
AIX® または Linux オペレーティング・システム上で IBM HTTP Server を使用する場合、 MaxSpareThreads プロパティーを、httpd.conf ファイルにある MaxClients プロパティーと同じ値に設定することができます。例えば MaxClients=600 の場合、MaxSpareThreads を 600 (MaxSpareThreads=600) に変更します。
エラーを避けるためにこの方法を選択する利点は、IBM HTTP Server が アイドル接続またはアイドル接続に近い接続をシャットダウンしないことです。この選択の欠点は、軽いアクティビティーの期間でも、IBM HTTP Server は利用可能な余分なスレッドを維持するために過剰なリソースを使用することです。この方法は、AIX または Linux オペレーティング・システムでのみ選択することができます。