付録C.3 WS-I Basic Profile 1.0aに対応するための注意事項
SOAP通信基盤によってWS-I Basic Profile 1.0aに対応したSOAPアプリケーションを運用する場合の注意事項について説明します。
- 〈この項の構成〉
(1) メッセージ送信時のHTTPバージョンについて
SOAP通信基盤を利用してSOAPクライアントを運用する場合,SOAPメッセージはHTTP/1.0を使用して送信されます。
(2) WSDL定義とメッセージとの整合性の確認順序について
SOAP通信基盤では,SOAPメッセージを受信した場合,WSDL定義とメッセージとの整合性を次に示す順に確認してください。矛盾がある場合には,対応するfaultcodeを持つフォルトを返します。また,メッセージがXML的に不正だった場合などに,この順番に関係なくSOAP通信基盤独自のfaultcode"Server"を持つフォルトを返す場合があります。
-
SOAPエンベロープの名前空間が正しいかどうか
正しくなければVersionMismatchを返します。
-
サービスが処理しなければならないヘッダを処理しているかどうか
処理していなければMustUnderstandを返します。
-
それ以外の矛盾がある場合
SOAP通信基盤独自のServerを返します。
(3) faultcodeについて
サービス実装内でfaultcodeが必要になった場合は,独自の名前空間を用意して独自のfaultcodeを生成するか,SOAP1.1のfaultcodeを使用してください。そのとき,ドット表記で詳細コードを追加することは避けてください。
- (例)
-
×:SomeFaultCode.moreDetailCode
○:SomeFaultCode
独自のfaultcodeを用意しても,ドット表記で詳細コードを追加すると,WS-I Basic Profileに対応しない可能性があります。
SOAPメッセージヘッダ中に,自サービスがあて先として指定されているにもかかわらず,対処できないmustUnderstand属性が"1"であるヘッダがある場合,MustUnderstandのfaultcodeを持つフォルトを作成してください。MustUnderstand以外のfaultcodeを持つフォルトを作成すると,WS-I Basic Profileに対応しない可能性があります。
(4) RPCでリテラルエンコーディングを使用する場合のbody要素のnamespace属性について
リテラルエンコーディングに対応したWSDL定義を生成する場合は,body要素にはnamespace属性を付加してください。また,その属性値には名前空間を表す絶対URIを指定してください。Body要素にnamespace属性がなかったり属性値が絶対URIでなかったりする場合,WS-I Basic Profileに対応しない可能性があります。
(5) ユーザ定義配列の型名について
SOAP通信基盤では,開発支援コマンドを使用してユーザ定義クラスの配列を含むソースからWSDL定義を生成する場合,ユーザ定義型名にSequenceOfというプレフィクスを付加した型名を用意します。形名は変更できますが,名称の選択には注意してください。プレフィクスをArrayOfなどに変更すると,WS-I Basic Profileに対応しない可能性があります。