14.8 FAQ

SOAPを利用した通信ができない場合の,考えられる原因や対処方法について示します。

<この節の構成>
(1) アプリケーションログが出力されません。どのように対処すればよいですか?
(2) クライアントからSOAPメッセージが正しく出力されません。どのように対処すればよいですか?
(3) SOAPメッセージがサーバに届きません。原因として何が考えられますか?
(4) SOAPサービスでメッセージを処理できません。どのように対処すればよいですか?
(5) サーバから返信用SOAPメッセージが正しく出力されていません。原因として何が考えられますか?
(6) クライアントへ返信用SOAPメッセージが届いていません。どのように対処すればよいですか?
(7) クライアントで返信用メッセージを処理できません。どのように対処すればよいですか?
(8) Cosminexusで提供しているSOAPクライアント以外のクライアントから通信できません。原因として何が考えられますか?
(9) プロキシサーバを越えて外部のSOAPサービスを利用できますか?
(10) 他社製品と接続するときにHTTPヘッダ中のSOAPAction値の設定が必要なケースがあります。CosminexusのSOAPクライアントでSOAPAction値は設定できますか?
(11) SOAPサービスを呼び出す時にユーザ認証が必要な場合,どのようにユーザIDやパスワードを設定すればよいですか?
(12) SOAPメッセージで要素の省略を含んだ配列を使用するにはどのようにしたらよいですか?
(13) SOAPクライアントからSSLを使用してSOAPサービスに接続するにはどのようにすればよいですか?
(14) 性能解析トレースが出力されません。どのように対処すればよいですか?

(1) アプリケーションログが出力されません。どのように対処すればよいですか?

アプリケーションログを出力するには,動作定義ファイルの設定が必要になります。「10. 動作定義ファイルおよび実行時オプションの設定項目」を参照して,動作定義ファイルが正しく設定されているかを確認してください。特に次に示す点に注意してください。

(2) クライアントからSOAPメッセージが正しく出力されません。どのように対処すればよいですか?

メソッド呼び出しで例外が発生していないか確認してください。また,ほかのメソッドやほかのSOAPサービスで,SOAPメッセージが正しく出力されているかどうかを確認することで,特定のメソッド呼び出しだけの問題かどうか確認できます。

メソッドを呼び出すときに,SOAPクライアントライブラリが動作しているかどうかを確認するには,トレースファイルを利用できます。出力されるトレースファイルのメッセージテキストの次に示すキーワードを参照することで,どこまで動作しているか把握できます。

トレースファイルに出力される形式に関しては,「14.4 トレースファイル」を参照してください。

(3) SOAPメッセージがサーバに届きません。原因として何が考えられますか?

クライアントからSOAPメッセージが正しく出力されているのに,サーバにSOAPメッセージが届かない場合は,送信先の指定が間違っているおそれがあります。クライアントからスタブを利用するときに指定する送信先URLを確認してください。次に送信先URLの例を示します。

http://hostname:8080/WebApp1/services/UserInfo

送信先URLの形式,ポート番号,コンテキストルートの指定内容などが正しいか確認してください。

また,Webサーバが正しく動作しているか確認してください。SOAPによる通信ができないだけでなく,HTMLファイルが表示できない場合は,通信路に問題がないかについても確認してください。

(4) SOAPサービスでメッセージを処理できません。どのように対処すればよいですか?

サーバにSOAPメッセージが届いているのに,正しいSOAPメッセージを返せない場合は,送信されたSOAPメッセージの内容が正しいか,および送信されたSOAPメッセージが正しく処理されているか確認します。

送信されたSOAPメッセージの内容が正しいかについては,アプリケーションログの内容を確認してください。送信されたSOAPメッセージが,SOAPサービスとして公開しているサービスに対応したものかどうかや,メソッド名,パラメタ名,およびパラメタに指定している内容などを確認してください。

SOAPメッセージがSOAPサービスで正しく処理されているかの確認は,サーバトレースを利用できます。出力されたファイルに記述された次のキーワードを参照することで,どこまで動作しているか把握できます。

トレースファイルに出力される形式に関しては,「14.4 トレースファイル」を参照してください。

また,ユーザが作成するSOAPサービスの実装そのものが正しく動作しているかどうかについても確認してください。

(5) サーバから返信用SOAPメッセージが正しく出力されていません。原因として何が考えられますか?

サーバから返信用SOAPメッセージが正しく出力されない場合は,SOAPサービスで処理した結果として正しいSOAPメッセージを返せないことが考えられます。「14.8(4) SOAPサービスでメッセージを処理できません。どのように対処すればよいですか?」を参照し,送信されてきたSOAPメッセージの内容が正しいか,およびそのメッセージを正しく処理できているか確認してください。

(6) クライアントへ返信用SOAPメッセージが届いていません。どのように対処すればよいですか?

SOAPサービスでは正しく処理できているのに,クライアントへ意図したSOAPメッセージが届いていない場合は,サーバトレースおよびクライアントトレースによって,SOAPメッセージの内容が正しいか,およびそのメッセージが正しく処理されているかを確認してください。トレースファイルの確認方法については,次に示す内容を参照してください。

(7) クライアントで返信用メッセージを処理できません。どのように対処すればよいですか?

クライアントに返信用SOAPメッセージが届いているのに,クライアント側で処理できない場合は,クライアントトレースによって,SOAPメッセージの内容が正しいか,およびそのメッセージが正しく処理されているかを確認してください。トレースファイルの確認方法については,「14.8(2) クライアントからSOAPメッセージが正しく出力されません。どのように対処すればよいですか?」を参照してください。

(8) Cosminexusで提供しているSOAPクライアント以外のクライアントから通信できません。原因として何が考えられますか?

Cosminexusで提供しているクライアント以外のクライアントでは,SOAP 1.1に対するサポート範囲や解釈の違いから,Cosminexusで提供するSOAP通信基盤で扱えない形式のSOAPメッセージを出している可能性があります。Cosminexus SOAP通信基盤が扱えるSOAP 1.1の範囲については,「12.1 SOAP 1.1との対応」を参照してください。

Cosminexusで提供しているクライアント以外のクライアントと,Cosminexus上で動作しているSOAPサービス間の通信ができない場合,クライアント部分に関してはご使用のクライアントから提供される情報に従って対処してください。

Cosminexusが提供しているSOAP通信基盤のサポート範囲外のSOAPメッセージか,Cosminexus以外のクライアントの動作に問題があるかを切り分けるには,同じWSDLを利用してCosminexusのSOAPクライアントライブラリからCosminexus上で動作しているSOAPサービスへの通信ができるかどうかを試すのが有効です。

また,サポート範囲外のメッセージを出していないか,および内容に問題ないかを確認するには,ご使用のクライアントとCosminexusのSOAPクライアントライブラリを使用した場合に出力されるメッセージの比較が有効です。CosminexusのSOAPクライアントライブラリを使用した場合のメッセージの確認は,アプリケーションログを参照してください。アプリケーションログについては,「14.5 アプリケーションログ」を参照してください。

(9) プロキシサーバを越えて外部のSOAPサービスを利用できますか?

利用できます。外部のSOAPサービスを利用する場合,クライアント定義ファイルのプロキシオプションに必要な情報を設定します。プロキシオプションの設定項目については,「10.6.6 プロキシオプション」を参照してください。クライアント定義ファイルの設定については,「10.3 クライアント定義ファイルの設定」を参照してください。

(10) 他社製品と接続するときにHTTPヘッダ中のSOAPAction値の設定が必要なケースがあります。CosminexusのSOAPクライアントでSOAPAction値は設定できますか?

設定できます。RPC形態のSOAPアプリケーションを例に,SOAPAction値を設定する方法を説明します。

RPC形態の場合,WSDL内でSOAPAction値を指定する個所を直接変更して,そのWSDLからスタブのソースコードを自動生成することで,送信メッセージのSOAPAction値を指定します。Java2WSDLコマンドでWSDLを生成すると,SOAPAction値はデフォルトで「""」が設定されます。次に,SOAPAction値の指定個所を抜粋したWSDLの例を示します。

(11) SOAPサービスを呼び出す時にユーザ認証が必要な場合,どのようにユーザIDやパスワードを設定すればよいですか?

次のように,呼び出すサービスのURLにユーザIDとパスワードを指定することで,ユーザ認証が必要なSOAPサービスを呼び出すことができます。

http://<ユーザID>:<パスワード>@<ホスト名またはIPアドレス>:<ポート番号>/・・・

なお,SOAP通信基盤では,BASIC認証だけに対応しています(DIGEST/FORM/CLIENT-CERT認証には対応していません)。

次に,ユーザIDとパスワードを指定する実装例を示します。

(12) SOAPメッセージで要素の省略を含んだ配列を使用するにはどのようにしたらよいですか?

メッセージング形態のSOAPアプリケーションを利用してください。RPC形態のSOAPアプリケーションでは,配列の要素を省略したSOAPメッセージを生成することはできません。

配列要素の省略とは,SOAPメッセージ中で,配列にoffsetを指定した場合,positionを指定した場合,配列要素にnil値を指定した場合,配列のサイズよりも要素の数が少なかった場合です。

他社製品のクライアントから接続する場合などで,配列要素の省略を含んだSOAPメッセージを受け取るRPCサービスを実装するときの注意点を次に示します。

RPC呼び出しの引数として,int[]やdouble[]のように,Javaの基本データ型を要素に持つ配列を使用した場合,配列要素が省略されていると,サービスからSOAP Faultが返ります。

表14-15 基本データ型配列要素が省略されていた場合のSOAP Faultの内容

SOAP Faultの要素内容
faultcode{http://c4web.cosminexus.com}:Server.userException
faultstringKDCCF9000-E C4Fault exception occurred. Detail = java.lang.NullPointerException
faultactorなし
detailなし

RPCサービス実装で配列要素の省略を使用しなくてはならない場合は,配列要素に基本データ型のラッパークラスを使用してください。

基本データ型のラッパークラスとは,java.lang.Integerクラスやjava.lang.Doubleクラスなどの,基本データ型の値を格納することのできるクラスです。

配列要素がクラスである場合,省略された要素にはnull値が格納されます。

(13) SOAPクライアントからSSLを使用してSOAPサービスに接続するにはどのようにすればよいですか?

SSLを使用するためには,暗号化に使用する鍵を格納するキーストアや証明書を格納するトラストストアを用意し,それらの情報をSOAPクライアント実行時に設定する必要があります。また,SSL認証の種類によって必要となるストア情報が異なります。次にSSL認証の種類と,それに必要なストア情報の関係を示します。

表14-16 SSL認証の種類とストア情報の関係

認証の種類 ※1キーストア情報 ※2トラストストア情報 ※2
キーストアキーストア
パスワード
トラストストアトラストストア
パスワード
サーバ認証
クライアント認証※3※3
相互認証
(凡例)
○:設定します。
-:設定しません。
注※1
認証の種類によって,それぞれ次のような準備が必要です。
サーバ認証
サーバ認証をするためには,サーバ証明書を発行した機関のルート証明書をあらかじめトラストストアに格納しておく必要があります。
クライアント認証
クライアント認証をするためには,クライアント証明書をあらかじめキーストアに格納しておく必要があります。中間証明書が存在する場合は,トラストストアに格納しておきます。
相互認証
サーバ認証およびクライアント認証の両方の準備をする必要があります。
注※2
キーストア情報およびトラストストア情報は,次の各プロパティに設定します。
  • キーストア:javax.net.ssl. keyStore
  • キーストアパスワード:javax.net.ssl. keyStorePassword
  • トラストストア:javax.net.ssl.trustStore
  • トラストストアパスワード:javax.net.ssl.trustStorePassword
注※3
中間証明書が存在する場合は設定する必要があります。

Cosminexusを使用する場合は,usrconf.propertiesに必要なプロパティを設定します。usrconf.propertiesについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。

次に使用例を示します。

(例)サーバ認証をする場合
usrconf.propertiesファイルに次のプロパティを設定します。
  • javax.net.ssl.trustStore=<トラストストアの絶対パス>
  • javax.net.ssl.trustStorePassword=<トラストストアパスワード>

コマンドラインを使用する場合は,-Dオプションを利用して必要なプロパティを設定します。次に使用例を示します。

(例)相互認証をする場合

%java -Djavax.net.ssl.keyStore=<キーストアの絶対パス>
     -Djavax.net.ssl.keyStorePassword=<キーストアパスワード>
     -Djavax.net.ssl.trustStore=<トラストストアの絶対パス>
     -Djavax.net.ssl.trustStorePassword=<トラストストアパスワード>
      <SOAPクライアントクラス>

注意事項
usrconf.properties中にストアのパスワードを設定する場合,usrconf.propertiesの読み取り権限を限定するなど,第三者にパスワードを読み取られないように注意してください。コマンドラインを使用する場合も,同様に注意してください。

(14) 性能解析トレースが出力されません。どのように対処すればよいですか?

性能解析トレースを出力するには,動作環境に応じた設定が必要です。「14.7.3 性能解析トレース使用時の注意事項」を参照して,動作環境を正しく設定してください。