第32章 基本的なデータバインディングの概念

概要

Apache CXF が型マッピングを処理する方法に適用される一般的なトピックがいくつかあります。

32.1. スキーマ定義の包含とインポート

概要

Apache CXF は、include および import スキーマタグを使用して、スキーマ定義の追加およびインポートをサポートします。これらのタグを使用すると、外部ファイルまたはリソースの定義をスキーマ要素のスコープに挿入できます。インクルードとインポートの本質的な違いは次のとおりです。

  • インクルードは、囲んでいるスキーマ要素と同じターゲット名前空間に属する定義を取り込みます。
  • インポートすると、囲んでいるスキーマ要素とは異なるターゲット名前空間に属する定義が取り込まれます。

xsd:include 構文

include ディレクティブの構文は次のとおりです。

<include schemaLocation="anyURI" />

anyURI によって指定された参照スキーマは、囲んでいるスキーマと同じターゲット名前空間に属しているか、ターゲット名前空間にまったく属していない必要があります。参照されるスキーマがどのターゲット名前空間にも属していない場合は、含まれるときに、それを囲むスキーマの名前空間に自動的に採用されます。

例32.1「別のスキーマを含むスキーマの例」 は、別の XML スキーマドキュメントを含む XML スキーマドキュメントの例を示しています。

例32.1 別のスキーマを含むスキーマの例

<definitions targetNamespace="http://schemas.redhat.com/tests/schema_parser"
             xmlns:tns="http://schemas.redhat.com/tests/schema_parser"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <include schemaLocation="included.xsd"/>
      <complexType name="IncludingSequence">
        <sequence>
          <element name="includedSeq" type="tns:IncludedSequence"/>
        </sequence>
      </complexType>
    </schema>
  </types>
  ...
</definitions>

例32.2「含まれるスキーマの例」 は、含まれているスキーマファイルの内容を示します。

例32.2 含まれるスキーマの例

<schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
        xmlns="http://www.w3.org/2001/XMLSchema">
  <!-- Included type definitions -->
  <complexType name="IncludedSequence">
    <sequence>
      <element name="varInt" type="int"/>
      <element name="varString" type="string"/>
    </sequence>
  </complexType>
</schema>

xsd:import syntax

import ディレクティブの構文は次のとおりです。

<import namespace="namespaceAnyURI"
        schemaLocation="schemaAnyURI" />

インポートされた定義は、namespaceAnyURI ターゲット 名前空間に属している必要があります。namespaceAnyURI が空白であるか、指定されていない場合、インポートされたスキーマ定義は修飾されません。

例32.3「別のスキーマをインポートするスキーマの例」 は、別の XML スキーマをインポートする XML スキーマの例を示しています。

例32.3 別のスキーマをインポートするスキーマの例

<definitions targetNamespace="http://schemas.redhat.com/tests/schema_parser"
             xmlns:tns="http://schemas.redhat.com/tests/schema_parser"
             xmlns:imp="http://schemas.redhat.com/tests/imported_types"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <import namespace="http://schemas.redhat.com/tests/imported_types"
              schemaLocation="included.xsd"/>
      <complexType name="IncludingSequence">
        <sequence>
          <element name="includedSeq" type="imp:IncludedSequence"/>
        </sequence>
      </complexType>
    </schema>
  </types>
  ...
</definitions>

例32.4「インポートされたスキーマの例」 インポートされたスキーマファイルの内容を示します。

例32.4 インポートされたスキーマの例

<schema targetNamespace="http://schemas.redhat.com/tests/imported_types"
        xmlns="http://www.w3.org/2001/XMLSchema">
  <!-- Included type definitions -->
  <complexType name="IncludedSequence">
    <sequence>
      <element name="varInt" type="int"/>
      <element name="varString" type="string"/>
    </sequence>
  </complexType>
</schema>

参照されていないスキーマドキュメントの使用

サービスの WSDL ドキュメントで参照されていないスキーマドキュメントで定義されたタイプを使用することは、3 つのステップのプロセスです。

  1. xsd2wsdl ツールを使用して、スキーマドキュメントを WSDL ドキュメントに変換します。
  2. 生成された WSDL ドキュメントの wsdl2java ツールを使用してタイプの Java を生成します。

    重要

    WSDL ドキュメントがサービスを定義していないことを示す警告が wsdl2java ツールから表示されます。この警告は無視してかまいません。

  3. 生成されたクラスをクラスパスに追加します。