8.3.2 WSDLの作成例
ここでは,「8.3.1 WSDLの作成に使用するビジネスプロセスの例」に示すビジネスプロセスに合わせたWSDLの作成例を示します。WSDLの形式に関する条件や注意事項については,「2.5.1(3) WSDLの形式」を参照してください。
WSDLの作成例は「Sample_Reception.wsdl」とします。Sample_Reception.wsdlの概要を次に示します。
- 「8.3.1 WSDLの作成に使用するビジネスプロセスの例」に示す内容を前提としています。
- ユーザ定義受付はオペレーション単位に作成することもできますが,Sample_Reception.wsdlは,一つのユーザ定義受付にすべてのオペレーション含むときのWSDLです。
- 作成するWSDLの通信スタイルは「document」スタイルを推奨しています。そのため,Sample_Reception.wsdlは「document」スタイルのWSDLとなっています。
WSDLの作成例「Sample_Reception.wsdl」を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://www.example.org/service"
xmlns:svc="http://www.example.org/service"
xmlns:req="http://www.example.org/request"
xmlns:res="http://www.example.org/response"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/request">
<xsd:element name="Request1" type="xsd:string" />
</xsd:schema>
<xsd:schema targetNamespace="http://www.example.org/response">
<xsd:element name="Response1" type="xsd:boolean" />
</xsd:schema>
<xsd:schema targetNamespace="http://www.example.org/service">
<xsd:element name="Fault1" type="svc:SampleData"/>
<xsd:complexType name="SampleData">
<xsd:sequence>
<xsd:element name="param1" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="ReqMsg1">
<wsdl:part element="req:Request1" name="reqParam"/>
</wsdl:message>
<wsdl:message name="ResMsg1">
<wsdl:part element="res:Response1" name="resParam"/>
</wsdl:message>
<wsdl:message name="FltMsg1">
<wsdl:part element="svc:Fault1" name="fltParam"/>
</wsdl:message>
<wsdl:portType name="SamplePortType">
<wsdl:operation name="operation1">
<wsdl:input message="svc:ReqMsg1"/>
<wsdl:output message="svc:ResMsg1"/>
<wsdl:fault message="svc:FltMsg1" name="Fault1"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SampleBinding" type="svc:SamplePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="operation1">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body/>
</wsdl:input>
<wsdl:output>
<soap:body/>
</wsdl:output>
<wsdl:fault name="Fault1">
<soap:fault name="Fault1"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SampleService">
<wsdl:port binding="svc:SampleBinding" name="UserInfo">
<soap:address location="http://localhost:80/SampleService/services/UserInfo" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions> |
この作成例「Sample_Reception.wsdl」は,次の(1)~(8)の作業を行って作成します。
- <この項の構成>
- (1) オペレーションとフォルト名のリストアップ
- (2) 割当変数の電文フォーマット定義ファイルのリストアップ
- (3) WSDLファイルのひな形の作成(wsdl:definitions要素の定義)
- (4) wsdl:types要素の定義
- (5) wsdl:message要素の定義
- (6) wsdl:portType要素の定義
- (7) wsdl:binding要素の定義
- (8) wsdl:service要素の定義
(1) オペレーションとフォルト名のリストアップ
ビジネスプロセスの受付アクティビティ,および応答アクティビティで定義されている同期のオペレーションをリストアップします。また,フォルト名が定義されている応答アクティビティがある場合は,フォルト名もリストアップします。
作成例ではオペレーションは「operation1」が該当します。また,フォルト名は「Fault1」が該当します。
(2) 割当変数の電文フォーマット定義ファイルのリストアップ
受付アクティビティ,および応答アクティビティが使用している割当変数の電文フォーマット定義ファイルをリストアップします。
作成例では,「Request.xsd」,「Response.xsd」,および「Fault.xsd」が該当します。
- 注意
- リストアップした電文フォーマット定義ファイルの中に,同じ名前空間のスキーマが複数存在する場合,一つのスキーマに集約する必要があります。
このとき,次の二つの条件を満たす場合,割当変数の電文フォーマット定義ファイルを名前の重複がなくなるよう変更してください。
・スキーマの中の要素について名前の重複がある。
・その要素の内容が異なる。
なお,割当変数の電文フォーマット定義ファイルが複数ファイルの場合(外部のXMLファイルを参照している場合),外部のXMLファイルのスキーマも含めて要素の重複がなくなるよう変更してください。
また,それぞれのスキーマの属性が相反する値を持つ場合,値の変更による影響を考慮してスキーマを集約してください。
- リストアップした電文フォーマット定義ファイルの中に,targetNamespace属性を持たないスキーマ(カメレオンスキーマ)がある場合,割当変数の電文フォーマット定義ファイルは,targetNamespace属性を指定したスキーマに変更してください。
- リストアップしたフォルト電文の電文フォーマット定義ファイルのルート要素が複合型でない場合,割当変数の電文フォーマット定義ファイルのルート要素を,複合型になるように変更してください。
- フォルト電文のルート要素の名前空間は,wsdl:definitions要素の名前空間と一致させる必要があります。
このため,次の二つの条件を満たす場合,その割当変数の電文フォーマットファイルを変更してください。
・フォルト電文が複数存在する。
・ルート要素の名前空間が異なる。
異なるオペレーションのフォルト電文同士の名前空間が異なる場合,オペレーションごとにWSDLファイルを分けて作成し,ユーザ定義受付を複数作成して対応できます。
(3) WSDLファイルのひな形の作成(wsdl:definitions要素の定義)
WSDLファイルのひな形として,XML宣言およびwsdl:definitions要素を定義します。wsdl:definitions要素には,次の表に示す属性を追加します。
表8-1 wsdl:definitions要素に追加する属性
属性 | 意味 | 値 | 個数 |
---|
targetNamespace | サービス部品の名前空間URI | 任意のURIを定義できます。ただし,フォルト電文がある場合には,フォルト電文の電文フォーマット定義ファイルのxsd:schema要素が持つtargetNamespace属性値と同じURIを定義します。 | 1 |
xmlns:svc | サービス部品のプレフィックス宣言 | targetNamespace属性と同じ値を定義します。 | 1 |
xmlns:req | 要求電文の電文フォーマットプレフィックス宣言 | 要求電文の電文フォーマット定義ファイルのxsd:schema要素が持つtargetNamespace属性値と同じURIを定義します。 | 1 |
xmlns:res | 応答電文の電文フォーマットプレフィックス宣言 | 応答電文の電文フォーマット定義ファイルのxsd:schema要素が持つtargetNamespace属性値と同じURIを定義します。 | 1 |
xmlns:soap | SOAPのプレフィックス宣言 | 既定の値「http://schemas.xmlsoap.org/wsdl/soap/」を定義します。 | 1 |
xmlns:wsdl | WSDLのプレフィックス宣言 | 既定の値「http://schemas.xmlsoap.org/wsdl/」を定義します。 | 1 |
xmlns:xsd | XMLスキーマのプレフィックス宣言 | 既定の値「http://www.w3.org/2001/XMLSchema」を定義します。 | 1 |
wsdl:definitions要素の定義例を次の図に示します。
図8-5 wsdl:definitions要素の定義例
![[図データ]](figure/zc080105.gif)
- 複数のオペレーションを使用する場合
- 作成例(Sample_Reception.wsdl)では,オペレーションを一つだけ使用していますが,複数のオペレーションを使用する場合,複数の要求電文,応答電文を扱うことになります。これらの電文が異なる複数の名前空間を使用している場合には,次の表に示すように,それぞれのプレフィックス宣言をwsdl:definitions要素に定義します。
表8-2 wsdl:definitions要素に追加する属性(複数のオペレーションを使用する場合)
属性 | 意味 | 値 |
---|
xmlns:reqN(N>0) | 要求電文が複数の名前空間に分かれる場合のプレフィックス宣言 | 要求電文の電文フォーマット定義ファイルのxsd:schema要素が持つtargetNamespace属性値と同じURIを定義します。
- 例
- http://www.example.org/request1
|
xmlns:resN(N>0) | 応答電文が複数の名前空間に分かれる場合のプレフィックス宣言 | 応答電文の電文フォーマット定義ファイルのxsd:schema要素が持つtargetNamespace属性値と同じURIを定義します。
- 例
- http://www.example.org/response1
|
- 定義した内容はwsdl:message要素の子要素であるwsdl:part要素のelement属性に定義します。wsdl:message要素の定義については,「8.3.2(5) wsdl:message要素の定義」を参照してください
- 複数のオペレーションを使用する場合の定義例を次の図に示します。
図8-6 wsdl:definitions要素の定義例(複数のオペレーションを使用する場合)
![[図データ]](figure/zc080111.gif)
(4) wsdl:types要素の定義
wsdl:types要素とその下位要素,および属性を定義します。
- (3)で定義したwsdl:definitions要素の子要素として,wsdl:types要素を定義します。
- (2)でリストアップした電文フォーマット定義ファイルのxsd:schema要素をtargetNamespace属性で分類し,それぞれのtargetNamespaceの値ごとに一つずつxsd:schema要素を定義します。
- 手順2.で定義したxsd:schema要素の属性として,電文フォーマット定義ファイルのxsd:schema要素が持つすべての属性を追加します。
- 手順2.で定義したxsd:schema要素の子要素として,電文フォーマット定義ファイルのxsd:schema要素が持つすべての子要素を追加します。
- 複数のフォルト電文があり,名前空間が異なる場合,フォルト電文の名前空間をwsdl:definitions要素のtargetNamespace属性の値に変更します。
wsdl:types要素以下に定義する要素と属性を次の表に示します。
表8-3 wsdl:types要素以下に定義する要素と属性
要素 | 属性 | 意味 | 値 | 個数 |
---|
wsdl:types | - | 型定義要素 | - | 1 |
| xsd:schema | - | スキーマ要素 | - | 1~電文フォーマット定義ファイルが使う名前空間の数 |
targetNamespace | 名前空間属性 | 電文のtargetNamespaceと同じ値を定義します。 | 1 |
xsd:schemaの属性 | 属性 | 電文の属性と同じ値を定義します。 | 1~属性の数 |
| xsd:schemaの子要素 | - | 電文の内容 | 電文が持つxsd:schema要素のすべての子要素をコピーします。 | 1~同一名前空間を使用する電文フォーマットのxsd:schema要素の子要素の数 |
- (凡例)
- -:該当しません。
wsdl:types要素の定義例を次の図に示します。
図8-7 wsdl:types要素の定義例
![[図データ]](figure/zc080106.gif)
(5) wsdl:message要素の定義
wsdl:message要素とその下位要素,および属性を定義します。
- (3)で定義したwsdl:definitions要素の子要素としてwsdl:message要素を定義します。
wsdl:message要素はWSDLで定義するオペレーションが持つすべての要求電文,応答電文,およびフォルト電文の数だけ定義します。
作成例では,オペレーションが一つあります。そのオペレーションには,要求電文が一つ,応答電文が一つ,フォルト電文が一つあるので,wsdl:message要素を三つ定義します。
- wsdl:message要素にname属性を定義します。
name属性の値は,ファイル内で一意な値になるよう,ほかのwsdl:message要素のname属性とは異なる値を定義します。
作成例では,operation1の要求電文にはReqMsg1,応答電文にはResMsg1と定義しています。フォルト電文は個数に合わせてFltMsgN(Nは1以上)とします。
- wsdl:message要素の子要素として,wsdl:part要素を一つずつ定義します。
- wsdl:part要素にname属性とelement属性を定義します。
name属性には任意の文字列を指定します。
element属性の値には,(4)でコピーしたxsd:schema要素の子要素から,ルート要素を選択して指定します。表8-1に示すプレフィックスとルート要素名を使用してQNameで指定します。
wsdl:message要素以下に定義する要素と属性を次の表に示します。
表8-4 wsdl:message要素以下に定義する要素と属性
要素 | 属性 | 意味 | 値 | 個数 |
---|
wsdl:message | - | メッセージ定義要素 | - | 1 |
name | メッセージ名属性 | ほかのwsdl:message要素のname属性とは異なる一意の文字列を定義します。 | 1 |
| wsdl:part | - | メッセージパート定義要素 | - | 1 |
name | メッセージパート名属性 | 任意の文字列※を定義します。 | 1 |
element | 要素参照属性 | 該当する電文フォーマットファイルのルート要素を定義します。 | 1 |
- (凡例)
- -:該当しません。
- 注※
- 使用できる文字種には制限があります。使用できる文字種の詳細については,マニュアル「Cosminexus SOAPアプリケーション開発ガイド」のWSDL定義の名称に関する内容を参照してください。
wsdl:message要素の定義例を次の図に示します。
図8-8 wsdl:message要素の定義例
![[図データ]](figure/zc080107.gif)
(6) wsdl:portType要素の定義
wsdl:portType要素とその下位要素,および属性を定義します。
- (3)で定義したwsdl:definitions要素の子要素として,wsdl:portType要素を一つ定義します。
- wsdl:portType要素にname属性を定義します。
name属性の値には,任意の文字列を指定できます。
- wsdl:portType要素の子要素として,wsdl:operation要素を定義します。
wsdl:operation要素は,(1)でリストアップしたオペレーションの数だけ定義します。
- wsdl:operation要素にname属性を定義します。
name属性の値には,(1)でリストアップしたオペレーションのオペレーション名を指定します。
作成例では,wsdl:operation要素を一つ定義し,name属性は「operation1」とします。
- wsdl:operation要素の子要素として,wsdl:input要素,wsdl:output要素,およびwsdl:fault要素を定義します。
wsdl:input要素,wsdl:output要素,wsdl:fault要素の順序で定義します。
フォルト電文用の応答アクティビティが存在しない場合,wsdl:fault要素は省略できます。フォルト電文用の応答アクティビティが複数存在する場合,その数だけ定義します。
作成例では,wsdl:input要素,wsdl:output要素,およびwsdl:fault要素を一つずつ定義します。
- wsdl:input要素およびwsdl:output要素にmessage属性を定義します。
message属性の値には,(5)で定義したwsdl:message要素のname属性の値をQNameで指定します。
- wsdl:fault要素にname属性とmessage属性を定義します。
name属性の値には,(1)でリストアップしたフォルト名を指定します。
message属性の値には,(5)で定義したwsdl:message要素のname属性の値をQNameで指定します。
wsdl:portType要素以下に定義する要素と属性を次の表に示します。
表8-5 wsdl:portType要素以下に定義する要素と属性
要素 | 属性 | 意味 | 値 | 個数 |
---|
wsdl:portType | - | ポートタイプ定義要素 | - | 1 |
name | ポートタイプ名属性 | 任意の文字列※を定義します。 | 1 |
| wsdl:operation | - | オペレーション定義要素 | - | 1~オペレーションの個数 |
name | オペレーション名属性 | オペレーション名を定義します。 | 1 |
| wsdl:input | - | 要求メッセージ定義要素 | - | 1 |
message | メッセージ参照属性 | (5)で定義したwsdl:message要素のname属性値をQNameで指定します。 | 1 |
wsdl:output | - | 応答メッセージ定義要素 | - | 1 |
message | メッセージ参照属性 | (5)で定義したwsdl:message要素のname属性値をQNameで指定します。 | 1 |
wsdl:fault | - | フォルトメッセージ定義要素 | - | 1~フォルトの個数 |
name | フォルトメッセージ名属性 | フォルト名を定義します。 | 1 |
message | フォルトメッセージ参照属性 | (5)で定義したwsdl:message要素のname属性値をQNameで指定します。 | 1 |
- (凡例)
- -:該当しません。
- 注※
- 使用できる文字種には制限があります。使用できる文字種の詳細については,マニュアル「Cosminexus SOAPアプリケーション開発ガイド」のWSDL定義の名称に関する内容を参照してください。
wsdl:portType要素の定義例を次の図に示します。
図8-9 wsdl:portType要素の定義例
![[図データ]](figure/zc080108.gif)
(7) wsdl:binding要素の定義
wsdl:binding要素とその下位要素,および属性を定義します。
- (3)で定義したwsdl:definitions要素の子要素として,wsdl:binding要素を定義します。
- wsdl:binding要素にname属性とtype属性を定義します。
name属性の値には,任意の文字列を指定できます。
type属性の値には,(6)で定義したwsdl:portType要素のname属性の値をQNameで指定します。
- wsdl:binding要素の子要素として,soap:binding要素を定義します。
- soap:binding要素にtransport属性を定義します。
transport属性の値は固定値です。「http://schemas.xmlsoap.org/soap/http」と定義します。
- wsdl:binding要素の子要素として,wsdl:operation要素を定義します。
wsdl:operation要素は,(1)でリストアップしたオペレーションの数だけ定義します。
- wsdl:operation要素にname属性を定義します。
name属性の値には,(6)で定義したwsdl:portType要素の子要素であるwsdl:operation要素のname属性の値と同じ値を指定します。
- wsdl:operation要素の子要素として,soap:operation要素を定義します。
- soap:operation要素にsoapAction属性を指定します。
soapAction属性の値は空にします。
- wsdl:operation要素の子要素として,wsdl:input要素,wsdl:output要素,およびwsdl:fault要素を定義します。
wsdl:input要素,wsdl:output要素,wsdl:fault要素の順序で定義します。
フォルト電文用の応答アクティビティが存在しない場合,wsdl:fault要素は省略できます。フォルト電文用の応答アクティビティが複数存在する場合,その数だけ定義します。
作成例では,wsdl:input要素,wsdl:output要素,およびwsdl:fault要素を一つずつ定義します。
- wsdl:input要素とwsdl:output要素の子要素として,soap:body要素を定義します。
soap:body要素には,値は指定しません。
- wsdl:fault要素にname属性を定義します。
name属性の値には,(6)で定義したwsdl:operation要素の子要素であるwsdl:fault要素のname属性の値と同じ値を指定します。
- wsdl:fault要素の子要素として,soap:fault要素を定義します。
- soap:fault要素にname属性を定義します。
name属性の値には,親要素であるwsdl:fault要素のname属性と同じ値を指定します。
wsdl:binding要素以下に定義する要素と属性を次の表に示します。
表8-6 wsdl:binding要素以下に定義する要素と属性
要素 | 属性 | 意味 | 値 | 個数 |
---|
wsdl:binding | - | バインディング定義要素 | - | 1 |
name | バインディング名属性 | 任意の文字列※を定義します。 | 1 |
type | ポートタイプ参照属性 | (6)で定義したwsdl:portTypeのname属性値をQNameで指定します。 | 1 |
| soap:binding | - | SOAPバインディング定義要素 | - | 1 |
transport | SOAPバインディング伝送形態定義属性 | 「http://schemas.xmlsoap.org/soap/http」を定義します(固定値)。 | 1 |
wsdl:operation | - | オペレーション定義要素 | - | 1~オペレーションの個数 |
name | オペレーション名属性 | オペレーション名を定義します。 (6)で定義したwsdl:operation要素の子要素であるwsdl:fault要素のname属性の値と同じ値を指定します。 | 1 |
| soap:operation | - | SOAPバインディングオペレーション定義要素 | - | 1 |
soapAction | SOAPActionヘッダ定義属性 | - | 1 |
wsdl:input | - | 要求メッセージ定義要素 | - | 1 |
| soap:body | - | SOAPバインディングBody要素定義要素 | - | 1 |
wsdl:output | - | 応答メッセージ定義要素 | - | 1 |
| soap:body | - | SOAPバインディングBody要素定義要素 | - | 1 |
wsdl:fault | - | フォルトメッセージ定義要素 | - | 1~フォルトの個数 |
name | フォルトメッセージ名属性 | フォルト名を定義します。 | 1 |
| soap:fault | - | SOAPバインディングFault要素定義要素 | - | 1 |
name | SOAPバインディング名前属性 | フォルト名を定義します。 | 1 |
- (凡例)
- -:該当しません。
- 注※
- 使用できる文字種には制限があります。使用できる文字種の詳細については,マニュアル「Cosminexus SOAPアプリケーション開発ガイド」のWSDL定義の名称に関する内容を参照してください。
wsdl:binding要素の定義例を次の図に示します。
図8-10 wsdl:binding要素の定義例
![[図データ]](figure/zc080109.gif)
- style属性およびuse属性を使用する場合
- wsdl:binding要素以下にstyle属性およびuse属性を使用して,documentまたはliteralを明示することもできます。
図8-11 wsdl:binding要素の定義例(style属性およびuse属性を使用する場合)
![[図データ]](figure/zc080112.gif)
(8) wsdl:service要素の定義
wsdl:service要素とその下位要素,および属性を定義します。
- (3)で定義したwsdl:definitions要素の子要素として,wsdl:service要素を定義します。
- wsdl:service要素にname属性を定義します。
name属性の値には,任意の文字列を指定できます。
- wsdl:service要素の子要素として,wsdl:port要素を一つ定義します。
- wsdl:port要素にname属性とbinding属性を定義します。
name属性の値には,任意の文字列を指定できます。
binding属性の値には,(7)で定義したwsdl:binding要素のname属性の値をQNameで指定します。
- wsdl:port要素の子要素として,soap:address要素を一つ定義します。
- soap:address要素にlocation属性を定義します。
location属性の値には,仮の値として「http://localhost:80/SampleService/services/<PortName>」を指定します。
<PortName>には,手順4.で定義したname属性と同じ値を指定してください。
- ポイント
- WSDLを作成した段階では,サービスロケーションの値(wsdl:port要素内のsoap-address要素のlocation属性値)は決定していません。このため,仮の値を設定します。この値は,Cosminexusが提供しているSOAP通信基盤でエラーにならない値です。
- サービスロケーションの値は,ユーザ定義ファイルを含むHCSCコンポーネントを配備定義したあとに確定します。WSDLを編集して,確定したサービスロケーションの値を設定してから,WSDLを基にサービスリクエスタを作成してください。WSDLの編集の詳細については,「10.6.2 WSDLを編集する」を参照してください。
wsdl:service要素以下に定義する要素と属性を次の表に示します。
表8-7 wsdl:service要素以下に定義する要素と属性
要素 | 属性 | 意味 | 値 | 個数 |
---|
wsdl:service | - | サービス定義要素 | - | 1 |
name | サービス名属性 | 任意の文字列※を定義します。 | 1 |
| wsdl:port | - | ポート定義要素 | - | 1 |
name | ポート名属性 | 任意の文字列※を定義します。 | 1 |
binding | バインディング参照属性 | (7)で定義したwsdl:binding要素のname属性値をQNameで指定します。 | 1 |
| soap:address | - | SOAPバインディングアドレス定義要素 | - | 1 |
location | サービス位置定義属性 | 仮の値として, 「http://localhost:80/SampleService/services/<PortName>」を定義します。 <PortName>には,wsdl:port要素のname属性と同じ値を指定します。 | 1 |
- (凡例)
- -:該当しません。
- 注※
- 使用できる文字種には制限があります。使用できる文字種の詳細については,マニュアル「Cosminexus SOAPアプリケーション開発ガイド」のWSDL定義の名称に関する内容を参照してください。
wsdl:service要素の定義例を次の図に示します。
図8-12 wsdl:service要素の定義例
![[図データ]](figure/zc080110.gif)
- 複数のwsdl:portを使用する場合
- 作成例(Sample_Reception.wsdl)では,一つのwsdl:port要素にすべてを定義していますが,複数のwsdl:port要素を使用して,それぞれにオペレーションを定義することもできます。
- 複数のwsdl:port要素を使用する場合の定義例を次の図に示します。
図8-13 wsdl:service要素の定義例(複数のwsdl:portを使用する場合)
![[図データ]](figure/zc080113.gif)