Menu Close

34.2. 制限により定義される単純型

概要

XML スキーマを使用すると、別のプリミティブ型または単純型から新しい型を派生することで、単純型を作成できます。単純型は、simpleType 要素を使用して説明されます。

新しい型は、1 つまたは複数のファセットで ベース型 を制限することで説明されます。これらのファセットは、新しい型に格納できる有効な値を制限します。たとえば、厳密に 9 文字の 文字列 である、単純型 SSN を定義できます。

それぞれのプリミティブ XML スキーマ型には、独自のオプションファセットのセットがあります。

手順

独自の単純型を定義するには、以下を行います。

  1. 新しい単純型のベース型を決定します。
  2. 選択したベース型で利用可能なファットに基づいて、新しい型を定義する制限を決定します。
  3. このセクションに示す構文を使用して、コントラクトの型セクションに適切な 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>

スキーマ検証の設定に関する詳細は、「スキーマ検証の型の値」を参照してください。