Menu Close

第32章 データバインディングの基本コンセプト

概要

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

32.1. スキーマ定義の追加およびインポート

概要

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

  • 追加の場合は、封入するスキーマ要素と同じターゲット namespace に属する定義を挿入します。
  • インポートの場合は、封入するスキーマ要素とは異なるターゲット namespace に属する定義を挿入します。

xsd:include 構文

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

<include schemaLocation="anyURI" />

anyURI によって指定される参照スキーマは、封入するスキーマと同じターゲット namespace に属するか、いずれのターゲット namespace にも属さないかのどちらかでなければなりません。参照されるスキーマがいずれのターゲット namespace にも属していない場合、追加する際に封入するスキーマの namespace に自動的に追加されます。

例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 構文

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

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

インポートされる定義は namespaceAnyURI ターゲット namespace に属している必要があります。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. 生成されたクラスをクラスパスに追加します。