付録C WS-I Basic Profileに適合したシステムを構築するための注意事項

<この節の構成>
(1) WS-I Basic Profileについて
(2) 新しくSOAPアプリケーションを開発する場合
(3) 既存のSOAPアプリケーションをWS-I Basic Profileに適合させる場合
(4) WS-I Basic Profile 1.0aに対応するための注意事項

(1) WS-I Basic Profileについて

WS-I Basic Profile Version 1.0aは,Webサービスの相互接続性を向上させるために,SOAP仕様およびWSDL仕様を明確にすることを目的としてWeb Services Interoperability Organization(WS-I)が制定したガイドラインです。このガイドラインには,WSDL定義を記述するときの記述のあいまいさを軽減したり,SOAPアプリケーションの振る舞いを統一したりする要件が含まれています。このガイドラインに対応すると,同じく対応したほかのシステムとの相互接続性を高めることができます。

SOAPアプリケーション開発支援機能およびSOAP通信基盤では,このガイドラインに沿ったSOAPアプリケーションおよびSOAPアプリケーションを利用するクライアントアプリケーションを開発,運用できます。しかし,そのためにはSOAPアプリケーションおよびクライアントアプリケーション開発時にもガイドラインを意識する必要があります。

(2) 新しくSOAPアプリケーションを開発する場合

新しくSOAPアプリケーションを開発する場合,SOAPアプリケーション開発支援機能使用時にWS-I Basic Profileに対応させるために必要となる設定は特にありません。ガイドラインを意識してSOAPアプリケーションを開発してください。

(3) 既存のSOAPアプリケーションをWS-I Basic Profileに適合させる場合

バージョン05-05以前で生成したWSDL定義はWS-I Basic Profileに対応しておりませんが,次の手順で対応できます。

  1. soapenc:Arrayを制限した配列を,maxOccursを使った配列に変更してください。
    付録A.1(1)(c) WSDL定義での配列定義について」に示す「05-00および05-05での形式」に該当する配列がある場合は,「06-00以降での形式」に合わせて修正してください。
  2. soap:body要素のuse属性が"encoded"となっている場合は,"literal"に変更してください。
注意事項
これらの操作でWS-I Basic Profileに対応させることができるWSDL定義は,SOAPアプリケーション開発支援機能で生成したWSDL定義だけです。これ以外の製品で生成したWSDL定義は,そのWSDL定義を生成した製品を用いてWS-I Basic Profileに対応するように変換してください。

(4) WS-I Basic Profile 1.0aに対応するための注意事項

SOAP通信基盤によってWS-I Basic Profile 1.0aに対応したSOAPアプリケーションを運用する場合の注意事項について説明します。

(a) メッセージ送信時のHTTPバージョンについて

SOAP通信基盤を利用してSOAPクライアントを運用する場合,SOAPメッセージはHTTP/1.0を使用して送信されます。

(b) WSDL定義とメッセージとの整合性の確認順序について

SOAP通信基盤では,SOAPメッセージを受信した場合,WSDL定義とメッセージとの整合性を次に示す順に確認してください。矛盾がある場合には,対応するfaultcodeを持つフォルトを返します。また,メッセージがXML的に不正だった場合などに,この順番に関係なくSOAP通信基盤独自のfaultcode"Server"を持つフォルトを返す場合があります。

  1. SOAPエンベロープの名前空間が正しいかどうか
    正しくなければVersionMismatchを返します。
  2. サービスが処理しなければならないヘッダを処理しているかどうか
    処理していなければMustUnderstandを返します。
  3. それ以外の矛盾がある場合
    SOAP通信基盤独自のServerを返します。
(c) 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に対応しない可能性があります。

(d) RPCでリテラルエンコーディングを使用する場合のbody要素のnamespace属性について

リテラルエンコーディングに対応したWSDL定義を生成する場合は,body要素にはnamespace属性を付加してください。また,その属性値には名前空間を表す絶対URIを指定してください。Body要素にnamespace属性がなかったり属性値が絶対URIでなかったりする場合,WS-I Basic Profileに対応しない可能性があります。

(e) ユーザ定義配列の型名について

SOAP通信基盤では,開発支援コマンドを使用してユーザ定義クラスの配列を含むソースからWSDL定義を生成する場合,ユーザ定義型名にSequenceOfというプレフィクスを付加した型名を用意します。形名は変更できますが,名称の選択には注意してください。プレフィクスをArrayOfなどに変更すると,WS-I Basic Profileに対応しない可能性があります。