Menu Close
34.2. 制限により定義される単純型
概要
XML スキーマを使用すると、別のプリミティブ型または単純型から新しい型を派生することで、単純型を作成できます。単純型は、simpleType
要素を使用して説明されます。
新しい型は、1 つまたは複数のファセットで ベース型 を制限することで説明されます。これらのファセットは、新しい型に格納できる有効な値を制限します。たとえば、厳密に 9 文字の 文字列
である、単純型 SSN
を定義できます。
それぞれのプリミティブ XML スキーマ型には、独自のオプションファセットのセットがあります。
手順
独自の単純型を定義するには、以下を行います。
- 新しい単純型のベース型を決定します。
- 選択したベース型で利用可能なファットに基づいて、新しい型を定義する制限を決定します。
-
このセクションに示す構文を使用して、コントラクトの型セクションに適切な
simpleType
要素を入力します。
XML スキーマでの単純型の定義
例34.1「単純型の構文」に、単純型を記述する構文を示します。
例34.1 単純型の構文
<simpleType name="typeName"> <restriction base="baseType"> <facet value="value" /> <facet value="value" /> ... </restriction> </simpleType>
型の説明は simpleType
要素に囲まれ、name
属性の値で識別されます。新しい単純型が定義されるベース型は、xsd:restriction
要素の base
属性で指定されます。各ファセット要素は restriction
要素内で指定されます。利用可能なファセットと有効な設定は、ベース型によって異なります。たとえば、xsd:string
には、以下のような多くのファセットがあります。
-
length
-
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 型にマッピングします。そのため、postalCode
のベース型が xsd:string
であるため、例34.2「郵便コードの単純型」に示す単純型 postalCode
を使用する任意のメッセージは、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>
スキーマ検証の設定に関する詳細は、「スキーマ検証の型の値」を参照してください。