34.2. 制限によって定義された単純なタイプ
概要
XML スキーマを使用すると、別のプリミティブ型または単純型から新しい型を派生させることにより、単純型を作成できます。単純なタイプは simpleType
要素を使用して記述されます。
新しいタイプは、1 つ以上のファセットで 基本タイプ を制限することによって記述されます。これらのファセットは、新しいタイプに格納できる有効な値を制限します。例えば、ちょうど 9 文字の string
である SSN
というシンプルな型を定義することができます。
各プリミティブ XML スキーマタイプには、独自のオプションファセットのセットがあります。
手順
独自の単純型を定義するには、次のようにします。
- 新しいシンプルタイプの基本タイプを決定します。
- 選択した基本タイプで使用可能なファセットに基づいて、新しいタイプを定義する制限を決定します。
-
このセクションで説明する構文を使用して、適切な
simpleType
要素をコントラクトの types セクションに入力します。
XML スキーマでの単純型の定義
例34.1「単純な型の構文」 は、単純型を記述するための構文を示しています。
例34.1 単純な型の構文
<simpleType name="typeName"> <restriction base="baseType"> <facet value="value" /> <facet value="value" /> ... </restriction> </simpleType>
タイプの description は simpleType
要素で囲まれ、name
属性の値で識別されます。新しい単純なタイプが定義されるベースタイプは、xsd:restriction
要素の ベース
属性で指定されます。各ファセット要素は restriction
要素内に指定されます。利用可能なファセットとその有効な設定は、ベース型によって異なります。たとえば、xsd:string
には以下を含む数多くのファセットが含まれます。
-
長さ
-
minLength
-
maxLength
-
pattern
-
whitespace
例34.2「郵便番号シンプルタイプ」 は、米国の州で使用される 2 文字の郵便番号を表す単純型の定義を示しています。大文字を 2 文字だけ含めることができます。TX
は有効な値ですが、tx
または tX
は有効な値ではありません。
例34.2 郵便番号シンプルタイプ
<xsd:simpleType name="postalCode"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Z]{2}" /> </xsd:restriction> </xsd:simpleType>
Java へのマッピング
Apache CXF は、ユーザー定義の単純型を単純型の基本型の Java 型にマップします。そのため、例34.2「郵便番号シンプルタイプ」 に示されているように、シンプルなタイプの postalCode
を使用するメッセージは、postalCode
のベースタイプが xsd:string
であるため、String
にマッピングされます。例えば、例34.3「シンプルタイプのクレジットリクエスト」 に示されている WSDL のフラグメントは、String
のパラメーター postalCode
を取る Java メソッド state()
になります。
例34.3 シンプルタイプのクレジットリクエスト
<message name="stateRequest"> <part name="postalCode" type="postalCode" /> </message> ... <portType name="postalSupport"> <operation name="state"> <input message="tns:stateRequest" name="stateRec" /> <output message="tns:stateResponse" name="credResp" /> </operation> </portType>
ファセットの実施
デフォルトでは、Apache CXF は、単純型を制限するために使用されるファセットを強制しません。ただし、スキーマ検証を有効にすることで、ファセットを適用するように Apache CXF エンドポイントを設定できます。
スキーマ検証を使用するように Apache CXF エンドポイントを設定するには、schema-validation-enabled
プロパティーを true
に設定します。例34.4「スキーマ検証を使用するように設定されたサービスプロバイダー」 は、スキーマ検証を使用するサービスプロバイダーの設定を示しています
例34.4 スキーマ検証を使用するように設定されたサービスプロバイダー
<jaxws:endpoint name="{http://apache.org/hello_world_soap_http}SoapPort"
wsdlLocation="wsdl/hello_world.wsdl"
createdFromAPI="true">
<jaxws:properties>
<entry key="schema-validation-enabled" value="BOTH" />
</jaxws:properties>
</jaxws:endpoint>
スキーマ検証の設定の詳細については、「スキーマ検証タイプの値」 を参照してください。