32.3. オブジェクトファクトリー

概要

JAXB は、オブジェクトファクトリーを使用して、JAXB で生成された構造のインスタンスをインスタンス化するためのメカニズムを提供します。オブジェクトファクトリーには、パッケージのスコープで XML スキーマで定義されたすべての設定をインスタンス化するためのメソッドが含まれています。唯一の例外は、列挙型がオブジェクトファクトリーで作成メソッドを取得しないことです。

複合型ファクトリーメソッド

XML スキーマ複合型を実装するために生成された Java クラスごとに、オブジェクトファクトリーにはクラスのインスタンスを作成するためのメソッドが含まれています。このメソッドの形式は次のとおりです。

typeName createtypeName();

たとえば、スキーマに widgetType という名前の複合型が含まれる場合、Apache CXF は WidgetType と呼ばれるクラスを生成して実装します。例32.5「複合型オブジェクトファクトリーエントリー」 は、オブジェクトファクトリーで生成された作成メソッドを示しています。

例32.5 複合型オブジェクトファクトリーエントリー

public class ObjectFactory
{
  ...
  WidgetType createWidgetType()
  {
    return new WidgetType();
  }
  ...
}

要素ファクトリーメソッド

スキーマのグローバルスコープで宣言されている要素の場合、Apache CXF はファクトリーメソッドをオブジェクトファクトリーに挿入します。33章XML 要素の使用 で説明されているように、XML Schema 要素は JAXBElement<T> オブジェクトにマッピングされます。作成方法は次の形式を取ります。

public JAXBElement<elementType> createelementName(elementType value);

たとえば、タイプ xsd:stringcomment という名前の要素がある場合、Apache CXF は 例32.6「要素オブジェクトファクトリーエントリー」 に示されるオブジェクトファクトリーメソッドを生成します。

例32.6 要素オブジェクトファクトリーエントリー

public class ObjectFactory
{
    ...
    @XmlElementDecl(namespace = "...", name = "comment")
    public JAXBElement<String> createComment(String value) {
        return new JAXBElement<String>(_Comment_QNAME, String.class, null, value);
    }
    ...
}