Hitachi

Cosminexus V11 アプリケーションサーバ SOAPアプリケーション開発の手引


12.2.8 XML Schema記述時の注意事項

XML Schemaの要素を記述するときの注意事項について説明します。また,非サポート要素の代替記述についても説明します。

〈この項の構成〉

(1) maxOccurs属性を記述する場合の注意事項

(2) restriction要素を記述する場合の注意事項

(3) list要素を記述する場合の注意事項

list要素を記述する場合の注意事項を示します。

記述できない要素および属性を記述した場合,不正なソースが生成されます。

(4) 単純型を基準型として拡張して,複合型を定義する場合の代替記述

simpleContent要素は非サポート要素です。単純型を拡張した複合型を定義するには,complexType要素を使用して記述してください。

単純型を基準型として拡張して,複合型を定義する場合の修正例を示します。

<修正前(非サポート)>

<修正後(代替記述)>

(5) 単純型を使用した派生によって,制限された複合型を定義する場合の代替記述

simpleContent要素は非サポートです。complexType要素を使用して,別の型として定義してください。

単純型を使用した派生によって,制限された複合型を定義する場合の修正例を示します。

<修正前(非サポート)>

<修正後(代替記述)>

(6) use属性の代替記述

attribute要素に指定するuse属性は非サポートです。attribute要素の出現可能性を型定義によって記述する場合には,その用途によってcomplexType要素を使用して,別の型として定義してください。

use属性を使用した記述の修正例を示します。

<修正前(非サポート)>

<修正後(代替記述)>

(7) default属性の代替記述

element要素またはattribute要素にdefault属性を指定する場合で,SOAPメッセージの送信側のアプリケーションで値を設定しないとき,default属性の属性値はSOAPメッセージに設定されません。

SOAPメッセージの受信側のアプリケーションで,該当する属性値がSOAPメッセージに設定されていない場合は,default属性の属性値に指定されている値を設定してください。

(8) fixed属性の代替記述

element要素またはattribute要素にfixed属性を指定する場合,SOAPメッセージの送信側のアプリケーションでどのような値を設定しても,fixed属性の属性値がSOAPメッセージに設定されません。

SOAPメッセージの受信側のアプリケーションで,fixed属性に指定されている値を設定してください。

(9) substitutionGroup属性の代替記述

substitutionGroup属性は非サポートです。グローバルのelement要素に非サポートであるsubstitutionGroup属性を指定することはできません。

次に示す修正例を基に,代替記述について説明します。

このスキーマのインスタンスでは,トップレベルの要素"SSG"は,子要素として,data要素を内容とする構造です。このdata要素は,dataPattern1要素,dataPattern2要素の代わりに使用できます。したがって,インスタンス2,インスタンス3も正しいXMLインスタンスとなります。Application Serverでは,substitutionGroup属性をサポートしないため,代替要素となる型(ここでは,dataPattern1要素,dataPattern2要素)を使用する場合は,別のWSDLで記述し,別のアプリケーションとする必要があります。

<修正前(非サポート)>

<修正後(代替記述)>

(10) mixed属性の代替記述

mixed属性は非サポートです。complexType要素,complexContent要素にmixed属性で実現する,内容の中に要素が入る構造は実現できません。SOAPメッセージで送信しなければならないデータを,それぞれ独立した要素となる型を作成してください。

mixed属性を使用した記述の修正例を示します。

<修正前(非サポート)>

<修正後(代替記述)>

(11) XML Schemaのビルトインデータ型使用時の注意事項

ENTITY型を指定してアプリケーションでデータを送受信できますが,ENTITY型としての機能は有効になりません。

(12) soapenc:Array型の制限に関する注意事項

WSDLのuse属性がliteralの場合,soapenc:Array型を制限した複合型を使用することはできません。配列を定義するには,代わりにmaxOccurs属性を指定した要素を子要素に持つ複合型を定義してください。

(13) wsdl:arrayType属性を記述する場合の注意事項

wsdl:arrayType属性を記述した場合の配列は,OUT属性およびINOUT属性で使用できません。

(14) ref属性,minOccurs属性,およびminOccurs属性を使用する場合の代替記述

ref属性,minOccurs属性,およびmaxOccurs属性を同じelement要素で使用した場合,不正なソースが生成されます。ref属性,minOccurs属性,およびmaxOccurs属性を同じelement要素で使用しないでください。

ref属性,minOccurs属性,およびmaxOccurs属性を使用する場合の修正例を示します。

<修正前(非サポート)>

<修正後(代替記述)>

(15) sequence要素に指定する属性に関する注意

sequence要素の属性に,minOccurs属性およびmaxOccurs属性は使用しないでください。

minOccurs属性,maxOccurs属性のどちらか,または両方を指定した場合,WSDL2JavaのWSDL検証機能でエラーにならないで,ソースコードが生成されます。

(16) xsd:enumeration要素を使用した場合の注意

クライアントアプリケーションまたはサーバアプリケーションでは,xsd:enumeration要素を使用して列挙型として定義した値だけを指定してください。

xsd:enumeration要素を使用して定義した列挙型の値以外の値をクライアントアプリケーション,またはサーバアプリケーションで指定した場合,スキーマに違反したSOAPメッセージが送信されます。このとき,エラーになりません。

(17) xsd:string型のxsd:list型で空文字列の要素を含む配列を送信した場合の注意

RPC形態のアプリケーションの場合,itemTypeがxsd:string型のxsd:list型で,空文字列の要素を含む配列を送信すると,受信時に配列の要素から空文字が削除されます。

(18) xsd:schema要素のtargetNamespace属性に関する注意

WSDL2Javaコマンド実行時に,targetNamespace属性を省略したxsd:schema要素を記述しているWSDLファイルを指定しても,エラーになりません。WSDL2Javaコマンドで指定するWSDLファイル内でxsd:schema要素を記述する場合は,targetNamespace属性を持つxsd:schema要素を記述してください。

(19) 複数のxsd:schema要素を記述する場合の注意

WSDL2Javaコマンド実行時に,同じtargetNamespace属性値を持つxsd:schema要素をwsdl:types要素以下に複数記述しているWSDLファイルを指定しても,エラーになりません。WSDL2Javaコマンドで指定するWSDLファイル内でwsdl:types要素以下に複数のxsd:schema要素を記述する場合は,それぞれ異なるtargetNamespace属性値を持つxsd:schema要素を記述してください。

(20) element要素にnillable属性を指定していない場合の注意

nillable属性を指定していないelement要素に対してアプリケーションで値を設定しないと,要素にxsi:nil="true" 属性が設定された空要素が送信され,不正なSOAPメッセージになります。

次の条件がすべて重なる場合に問題が発生します。なお,element要素の型は問いません。

XML Schemaの指定で空要素指定がされていない要素には,アプリケーションで必ず値を設定してください。