以下が役立つはずです。
注釈
JAXBモデルクラスはアノテーションを必要としません。を作成するときにクラスが自動的に処理される必要があることを示すアノテーションはありませんJAXBContext
。
Aの作成JAXBContext
を作成する主な方法は2つありますJAXBContext
1-クラスについて
ドメインクラスの配列を渡します。次に、これらのクラスのマッピングが作成されます。参照用にマッピングも作成されます(以下のクラスの概要を参照してください)。
2-コンテキストパス上
あなたが引用した私の記事(http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html)はコンテキストパスを使用しています。コンテキストパスは、コロンで区切られたパッケージ名で構成されます。各パッケージには、jaxb.index
ファイルまたはObjectFactory
クラスのいずれかが含まれている必要があります。このjaxb.index
ファイルは、作成するクラス名のキャリッジリターンで区切られたリストですJAXBContext
。クラスの配列にを作成する場合と同様にJAXBContext
、参照クラスも処理されます。
どのクラスが作成されているか
以下は、を作成するときにどのセカンダリクラスが処理されるかに関係する重要な概念の一部ですJAXBContext
。
1-参照クラス
クラスでaJAXBContext
が作成された場合、はによって参照されるため、も処理されます。Foo
Bar
Foo
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
private List<Bar> bar;
}
2-スーパークラス
クラスが処理されると、そのスーパークラスも処理されます。@XmlTransient
クラスにアノテーションを付けて、クラスが処理されないようにすること ができます( http://blog.bdoughan.com/2011/06/ignoring-inheritance-with-xmltransient.htmlを参照)。
public class Foo extends Bar {
}
3-サブクラス
クラスが処理される場合、そのサブクラスは自動的に処理されません。クラスにアノテーションを付け@XmlSeeAlso
て、処理するサブクラスを指定できます。
@XmlSeeAlso({Bar.class})
public class Foo {
}
4-JAXBアノテーションから参照されるクラス
クラスが処理されると、そのクラス内のJAXBアノテーションで指定されたクラスも処理されます
public class Foo {
@XmlElements({
@XmlElement(name="a", type=A.class),
@XmlElement(name="b", type=B.class)
})
private Object bar;
}