32.2. XML 名前空間マッピング

概要

XML スキーマのタイプ、グループ、および要素の定義は、名前空間を使用してスコープされます。名前空間は、同じ名前を使用するエンティティー間で発生する可能性のある名前の衝突を防ぎます。Java パッケージも同様の目的を果たします。したがって、Apache CXF は、スキーマドキュメントのターゲット名前空間を、スキーマドキュメントで定義された構造を実装するために必要なクラスを含むパッケージにマップします。

パッケージの命名

生成されたパッケージの名前は、次のアルゴリズムを使用してスキーマのターゲット名前空間から取得されます。

  1. URI スキームが存在する場合は、削除されます。

    注記

    Apache CXF は、http:https:、 および urn: スキームのみを削除します。

    たとえば、名前空間 http:\\www.widgetvendor.com\types\widgetTypes.xsd\\widgetvendor.com\types\widgetTypes.xsd になります。

  2. 末尾のファイルタイプ識別子が存在する場合は、削除されます。

    たとえば, \\www.widgetvendor.com\types\widgetTypes.xsd\\widgetvendor.com\types\widgetTypes になります。

  3. 生成される文字列は、/ および : を区切り文字として使用し、文字列の一覧に分割されます。

    そのため、\\www.widgetvendor.com\types\widgetTypes はリスト {"www.widegetvendor.com", "types", "widgetTypes"} になります。

  4. リストの最初の文字列がインターネットドメイン名の場合、次のように分解されます。

    1. 先頭の www. は取り除かれます。
    2. 残りの文字列は、. を区切り文字として使用し、コンポーネント部分に分割されます。
    3. リストの順序が逆になります。

      そのため、{"www.widegetvendor.com", "types", "widgetTypes"}{"com", "widegetvendor", "types", "widgetTypes"} になります

      注記

      インターネットドメイン名は .com.net.edu.org.gov のいずれか、または 2 文字の国コードのいずれかで終わります。

  5. 文字列はすべて小文字に変換されます。

    そのため {"com", "widegetvendor", "types", "widgetTypes"}{"com", "widegetvendor", "types", "widgettypes"} になります。

  6. 文字列は、次のように有効な Java パッケージ名コンポーネントに正規化されます。

    1. 文字列に特殊文字が含まれる場合、特殊文字はアンダースコア (_) に変換されます。
    2. 文字列のいずれかが Java キーワードである場合、キーワードの前にアンダースコア (_) が付けられます。
    3. 数字で始まる文字列のいずれかの場合は、文字列の前にアンダースコア (_) が付きます。
  7. 文字列は、区切り文字として . を使用して連結されます。

    そのため {"com", "widegetvendor", "types", "widgettypes"} は、パッケージ名 com.widgetvendor.types.widgettypes になります。

namespace http:\\www.widgetvendor.com\types\widgetTypes.xsd で定義された XML Schema コンストラクトは Java パッケージ com.widgetvendor.types.widgettypes にマッピングされます。

パッケージの内容

JAXB で生成されたパッケージには次のものが含まれています。

  • スキーマで定義された各複合型を実装するクラス

    複合型マッピングの詳細については、35章複雑なタイプの使用 を参照してください。

  • enumeration ファセットを使用して定義された単純なタイプの列挙タイプ

    列挙のマッピング方法の詳細については、「列挙」 を参照してください。

  • スキーマからオブジェクトをインスタンス化するメソッドが含まれるパブリック ObjectFactory クラス

    ObjectFactory クラスの詳細は、「オブジェクトファクトリー」 を参照してください。

  • パッケージ内のクラスに関するメタデータを提供する package-info.java ファイル