Menu Close

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 スキーマ要素は JAXBElement<T> オブジェクトにマッピングされます。作成メソッドは以下の形式になります。

public JAXBElement<elementType> createelementName(elementType value);

たとえば、xsd:string 型の comment という名前の要素の場合、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);
    }
    ...
}