Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


2.6.1 Webサービスを利用したサービス部品の適用範囲

Webサービスを利用したサービス部品の適用範囲を次に示します。

ポイント

このマニュアルで説明するWSDLおよびXMLスキーマでは,特定のプリフィックスと名前空間URIを対応づけて記述しています。プリフィックスと名前空間URIの対応を次の表に示します。

表2‒10 プリフィックスと名前空間URIの対応

プリフィックス

名前空間URI

wsdl

http://schemas.xmlsoap.org/wsdl/

xsd

http://www.w3.org/2001/XMLSchema

soap

http://schemas.xmlsoap.org/wsdl/soap/

soap12

http://schemas.xmlsoap.org/wsdl/soap12/

wsi

http://ws-i.org/profiles/basic/1.1/xsd

〈この項の構成〉

(1) 前提となる仕様

Webサービスを利用したサービス部品の前提仕様について,SOAP1.1モードの場合およびSOAP1.1/1.2併用モードの場合に分けて説明します。

(2) SOAPメッセージの形式

SOAPメッセージは,SOAPヘッダとSOAPボディで構成されます。SOAPヘッダにはメッセージの付加的な情報(識別情報など)が含まれ,SOAPボディにはメッセージ本体が含まれています。

Webサービスを利用したサービス部品では,SOAPメッセージの形式として次の条件を満たしている必要があります。

なお,08-53よりも前のバージョンのサービスプラットフォームでは,soap:header要素を定義したWSDLを基にSOAPアダプタを作成できますが,soap:header要素は無視されます。

(3) WSDLの定義時の注意(SOAP1.1モード)

SOAP1.1モードを使用する場合のWSDLの記述形式,およびWSDL定義時の注意事項について説明します。WSDL1.1仕様のサポート範囲については,「2.6.1(5) WSDL1.1仕様のサポート範囲」を参照してください。

(a) wsdl:types要素

wsdl:types要素は,SOAPメッセージで使用する型に関する情報を定義する要素です。wsdl:types要素は,次に示す規則に従って記述してください。

  • wsdl:definitions要素の子要素として記述してください。

  • 記述できる個数は0個または1個です。2個以上は記述できません。

  • wsdl:documentation要素およびwsdl:import要素よりもあとに記述してください。

  • wsdl:documentation要素およびwsdl:import要素を除く,ほかのすべての要素よりも前に記述してください。

(b) xsd:schema要素

xsd:schema要素は,XMLスキーマを記述する要素です。xsd:schema要素は,wsdl:types 要素の子要素として記述してください。XMLスキーマを記述するときの規則については,「2.6.5 XMLスキーマの適用範囲」を参照してください。

(c) wsdl:import要素

wsdl:import要素は,WSDLをインポートする場合に定義する要素です。wsdl:definitions要素の子要素として記述してください。wsdl:import要素は,次に示す規則に従って記述してください。

  • wsdl:documentation要素よりもあとに記述してください。

  • wsdl:documentation要素を除く,ほかのすべての要素よりも前に記述してください。

  • namespace属性は必ず記述してください。

  • 値にパーセントエンコーディングした値を設定する場合,16進数値を大文字で設定してください。例を次に示します。

    正:location="%E3%81%82.wsdl"

    誤:location="%e3%81%82.wsdl"

  • wsdl:import要素のlocation属性を指定する場合の注意を次に示します。

    • RFC2396で規定される文字およびxsd:anyURIを満たす文字を使用してください。ただし,RFC2732(IPv6)は使用できません。

    • wsdl:import要素のlocation属性を絶対URIで指定する場合は,http,https,およびfileのプロトコルのどれかを使用してください。

    location属性の指定例を次に示します。

    (例1)ローカルにあるWSDLを相対パスで指定

    ./example/sample.wsdl

    (例2)ローカルにあるWSDLをURL形式の絶対パスで指定

    file:///C:/example/sample.wsdl

    (例3)リモートにあるWSDLをURLで指定

    http://example.com/sample.wsdl

(d) soap:binding要素

soap:binding要素は,SOAPバインディングを定義する要素です。soap:binding要素は,次に示す規則に従って記述してください。

  • wsdl:binding要素の子要素として記述してください。

  • 必ず1個記述してください。2個以上は記述できません。

  • transport属性にはHTTPバインディングを示す"http://schemas.xmlsoap.org/soap/http"を指定してください。

  • バインディング宣言はSOAPバインディングを宣言してください。SOAPバインディング以外は宣言できません。

(e) wsdl:operation要素

wsdl:operation要素は,次に示す規則に従って記述してください。

  • wsdl:portType要素の子要素であるwsdl:operation要素と,wsdl:binding要素の子要素であるwsdl:operation要素は,1対1になるように記述してください。

  • name属性は255バイト以下で記述してください。

(f) soap:operation要素

soap:operation要素は,SOAPバインディングでのオペレーションの情報を定義する要素です。soap:operation要素は,次に示す規則に従って記述してください。

  • wsdl:binding要素の子要素であるwsdl:operation要素の子要素として記述してください。

  • 必ず1個記述してください。2個以上は記述できません。

  • style属性が「rpc」の場合,soap:body要素のnamespace属性に記述された名前空間に「オペレーション名」,または「オペレーション名」+「Response」をname属性として持つelement要素を指定しないでください。

(g) soap:body要素

soap:body要素は,SOAPメッセージのsoap:body要素以下のメッセージを定義する要素です。soap:body要素は,次に示す規則に従って記述してください。

  • wsdl:binding要素の孫要素であるwsdl:input要素またはwsdl:output要素の子要素として記述してください。

  • 必ず1個記述してください。2個以上は記述できません。

  • 子要素は記述できません。

なお,style属性が「document」の場合,parts属性を記述することはできますが,無視されます。

(h) wsdl:fault要素

wsdl:fault要素はフォルトを定義する要素です。wsdl:fault要素は,次に示す規則に従って記述してください。

  • wsdl:portType要素およびwsdl:binding要素の子要素として記述してください。

  • 同じname属性の値を持つwsdl:fault要素を複数記述しないでください。

  • wsdl:portType要素の子要素であるwsdl:operation要素で定義したwsdl:fault要素と対応するよう,wsdl:binding要素の子要素であるwsdl:operation要素にwsdl:fault要素を定義している必要があります。

(i) soap:fault要素

soap:fault要素は,SOAPメッセージのsoap:fault要素に含まれるdetail子要素以下のメッセージを定義する要素です。soap:fault要素は,次に示す規則に従って記述してください。

  • wsdl:binding要素の子要素であるwsdl:fault要素の子要素として記述してください。

  • 必ず1個記述してください。2個以上は記述できません。

フォルトを使用する場合の条件

サービス部品から返されたSOAP Faultでは,次の条件をすべて満たす場合にフォルト名がfaultCodeに設定され,フォルトとして扱われます。

  • サービス部品側にSOAP通信基盤(Web Services)を使用していること。

  • WSDLフォルト名(wsdl:fault要素のname属性値)と,schema(wsdl:types内)に定義された例外型complexTypeを指すelement名が,名前空間を含めて一致していること。

これらの条件を満たしていないWSDLを利用する場合で,サービス部品から返されたSOAP Faultをフォルトとして扱いたいときは,SOAP Fault動作定義ファイルを定義してユーザ定義例外となるように設定します。

注※

element名とは,「wsdl:faultが参照するwsdl:part要素が,element属性を用いて指定する要素」のことです。WSDLを次の順にたどって特定できる要素を指します。

1.wsdl:fault

2.wsdl:message(この要素をたどらない場合もあります)

3.wsdl:part

4.xsd:element

なお,サービスプラットフォームの開発支援コマンドであるJava2WSDLコマンドを使用して,オペレーションのstyle属性が「rpc」のWSDLファイルを生成した場合,element属性ではなく,type属性で参照するWSDLファイルが生成されます。

そのため,生成されたWSDLファイルをそのまま使用しないで,修正および再生成してから使用します。WSDLファイルの修正および再生成の方法については,「4.3.2 サービス部品電文を作成する(Webサービスの場合)」の注意事項を参照してください。

サービスプラットフォームでフォルトを使用する場合,documentスタイルのWSDLを使用することを推奨します。

(j) soap:header要素

soap:header要素は,SOAPメッセージのsoap:header要素以下のメッセージを定義する要素です。soap:header要素は,次に示す規則に従って記述してください。

  • wsdl:binding要素の孫要素となるwsdl:input要素およびwsdl:output要素の子要素として記述してください。

  • 子要素は記述できません。

  • message属性には,wsdl:input要素またはwsdl:output要素から参照されるwsdl:message要素とは異なるwsdl:message要素を指定してください。

  • part属性には,message属性に指定したwsdl:message要素の子要素であるwsdl:part要素を指定してください。

(k) wsdl:service要素

wsdl:service 要素は,SOAP サービスを定義する要素です。1個のwsdl:service要素にwsdl:port要素は必ず1個記述してください。2個以上は記述できません。

(l) 添付ファイルを使用するためのWSDL定義

添付ファイルを使用するためのWSDLの定義は記述できません。

(4) WSDLの定義時と使用時の注意(SOAP1.1/1.2併用モード)

SOAP1.1/1.2併用モードを使用する場合,マニュアル「アプリケーションサーバ Webサービス開発ガイド」の「4.3.1 WSDLファイルを作成する」を参考にしてWSDLを記述してください。

ただし,マニュアル「アプリケーションサーバ Webサービス開発ガイド」の「4.3.1 WSDLファイルを作成する」に記載されている内容と,サービスプラットフォームの動作が異なる点があります。SOAP1.1/1.2併用モードを使用する場合のWSDL定義時の注意事項を示します。

(a) 使用できるWSDL定義のスタイル

WSDL定義のスタイルは,document/literalで定義してください。

(b) wsdl:port要素

wsdl:port要素のname属性が重複している場合エラーが発生します。すべてのWSDLでname属性を一意にしてください。

(c) wsdl:types要素

wsdl:types要素の子要素としてスキーマを定義する場合,コメントの記述はxsd:annotationを利用して記述してください。

また,サービスアダプタでWSDLから作成される電文フォーマットの名前空間宣言に,JAXBの名前空間「http://java.sun.com/xml/ns/jaxb」が付加されます。

(d) wsdl:operation要素

wsdl:operation要素のname属性は255バイト以下で記述してください。

(e) サービス部品側にSOAP通信基盤を使用している場合の定義

サービス部品側にSOAP通信基盤を利用している場合は,wsdl:fault要素のname属性とwsdl:part要素の参照するxsd:element要素のname属性と一致させてください。

(f) 添付ファイルを使用するためのWSDL定義

WS-I Attachments Profile - Version 1.0で規定されたwsi:swaRef形式で記述できます。マニュアル「アプリケーションサーバ Webサービス開発ガイド」の「28.3.1 添付ファイル使用時のWSDLの記述(wsi:swaRef形式)」に記載されている内容に従ってください。ただし,xsd:import要素のschemaLocation属性にファイルを指定する場合,「http://ws-i.org/profiles/basic/1.1/swaref.xsd」で公開されているスキーマファイルと同じ内容のファイルを指定してください。

(g) WSDLの検証

  • Basic Profileに基づいた検証によって発生するエラーは,サービスプラットフォームでは警告になります。Basic Profileに基づいた検証によって発生する警告メッセージIDと,対応するエラーIDおよび発生条件を次の表に示します。

    表2‒11 Basic Profileに基づいた検証によって発生する警告(エラー)

    項番

    警告メッセージID

    対応するエラーID

    発生条件

    1

    KDJW51209-W

    KDJW51208-E

    soap:body要素にnamespace属性を記述したときに発生します。

    2

    KDJW51211-W

    KDJW51210-E

    soap:fault要素にnamespace属性を記述したときに発生します。

    3

    KDJW51213-W

    KDJW51212-E

    拡張要素にwsdl:required属性を記述したときに発生します。

  • 次の条件に基づく検証は,サービスプラットフォームで実行されません。

    • WSDLに定義する要素の個数に関する検証

    • Javaの予約語を記述している場合の検証

(5) WSDL1.1仕様のサポート範囲

SOAP1.1モードを使用する場合のWSDL1.1仕様のサポート範囲を次の表に示します。

SOAP1.1/1.2併用モードを使用する場合のWSDL1.1仕様のサポート範囲については,マニュアル「アプリケーションサーバ Webサービス開発ガイド」の「20.1 WSDL 1.1仕様のサポート範囲」を参照してください。

表2‒12 WSDL1.1仕様のサポート範囲

分類

サポート

備考

大分類

小分類

サービス定義:WSDLドキュメント構造

Document Naming and Linking

名前空間のスコープについて規定しています。

Authoring Style(部品のimport要素による取り込み)

ほかのファイルのimport要素による取り込みについて規定しています。

Language Extensibility and Binding

×

wsdl:required属性のデプロイについて規定しています。

Documentation

要素内のコメントについて規定しています。

サービス定義:wsdl:types

扱うデータ型について規定しています。

サービス定義:wsdl:message

メッセージの論理定義を規定しています。

サービス定義:ポートタイプ

One-way Operation

×

メッセージの一方向操作について規定しています。

Request-response Operation

メッセージの要求/応答操作について規定しています。

Solicit-response Operation

×

メッセージの送信要求/応答操作について規定しています。

Notification Operation

×

メッセージの通知操作について規定しています。

Names of Elements within an Operation

inputおよびoutput要素のname属性を示します。オーバーロードはできません。WSDL内では名称を一意にする必要があります。

Parameter Order within an Operation

操作内のパラメタの順序について規定しています。parameterOrder属性によって,パラメタのリストを指定できます。

サービス定義:wsdl:binding

メッセージ形式とプロトコルの詳細の定義を規定しています。

サービス定義:wsdl:port

サービスの物理的定義について規定しています。

サービス定義:wsdl:service

サービスの位置について規定しています。1つのWSDLに複数のSOAPサービスを対応させることはできません。

SOAPバインディング

soap:binding

SOAP形式のバインディングを規定しています。

soap:operation

SOAPメッセージ内のSOAPオペレーションへの情報について規定しています。

soap:body

SOAPメッセージ内のSOAPボディのメッセージ部分の表示方法について規定しています。parts属性を記述できますが,無視されます。

soap:fault

SOAPメッセージ内のSOAPフォルトの内容について規定しています。

soap:header

SOAPメッセージ内のSOAPヘッダ要素内の内容について規定しています。

soap:headerfault

×

soap:address

port要素のアドレスについて規定しています。

MIMEバインディング

mime:content

×

MIMEタイプを規定しています。

mime:multipartRelated

×

MIMEパートの任意のセットを集約しています。

mime:part

×

個々のMIMEパートを規定しています。

mime:mimeXml

×

特定のスキーマを持っているXMLペイロードを規定しています。SOAPには準拠していません。

(凡例)

○:サポートしています。

×:サポートしていません。

(6) ライフサイクル

サービスプラットフォームの実行環境とサービス部品の間では,セッションを維持するように設定(DeployScopeに「Session」,「Application」を設定)しても,ステートフルな呼び出しはできません。サービスアダプタでは,常に「Request」での呼び出しです。