2.6.1 Webサービスを利用したサービス部品の適用範囲
Webサービスを利用したサービス部品の適用範囲を次に示します。
- ポイント
-
このマニュアルで説明するWSDLおよびXMLスキーマでは,特定のプリフィックスと名前空間URIを対応づけて記述しています。プリフィックスと名前空間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併用モードの場合に分けて説明します。
-
SOAP1.1モードの場合
SOAP1.1モードの場合,Webサービスを利用したサービス部品は,次のバージョンの仕様に従って作成されている必要があります。
-
SOAP1.1
-
WSDL1.1
-
SAAJ1.2
また,サービスプラットフォームでは,WS-I Basic Profile 1.0aに従ってサービス部品を作成することを推奨します。
-
-
SOAP1.1/1.2併用モードの場合
SOAP1.1/1.2併用モードの場合,Webサービスを利用したサービス部品は,次のバージョンの仕様に従って作成されている必要があります。
-
SOAP1.1またはSOAP1.2
-
WSDL1.1
-
SAAJ1.3
また,サービスプラットフォームでは,WS-I Basic Profile 1.1に従ってサービス部品を作成することを推奨します。
-
(2) SOAPメッセージの形式
SOAPメッセージは,SOAPヘッダとSOAPボディで構成されます。SOAPヘッダにはメッセージの付加的な情報(識別情報など)が含まれ,SOAPボディにはメッセージ本体が含まれています。
Webサービスを利用したサービス部品では,SOAPメッセージの形式として次の条件を満たしている必要があります。
-
要求電文および応答電文が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要素を指定してください。
(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で定義してください。
(c) wsdl:types要素
wsdl:types要素の子要素としてスキーマを定義する場合,コメントの記述はxsd:annotationを利用して記述してください。
また,サービスアダプタでWSDLから作成される電文フォーマットの名前空間宣言に,JAXBの名前空間「http://java.sun.com/xml/ns/jaxb」が付加されます。
(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仕様のサポート範囲」を参照してください。
分類 |
サポート |
備考 |
|
---|---|---|---|
大分類 |
小分類 |
||
サービス定義: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」での呼び出しです。