私は静的ファクトリメソッドを次のように定義しています:
@XmlType(factoryClass=DummyFactory.class, factoryMethod="createNew")
public abstract MyClass() {
}
私がファクトリメソッドを使用している理由MyClass
は抽象的であり、そのインスタンスを取得する方法はクラスの特定のアノテーションに依存するためです。このロジックはファクトリメソッドに組み込まれていcreateNew
ます。
さらに、ファクトリクラスDummyFactory
は抽象です。私が理解している限り、ファクトリメソッドが静的である場合、ファクトリクラスはデフォルトのコンストラクタを提供する必要はありません(http://download.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlType.html) 。
これは、ファクトリクラスがどのように見えるかを単純化したものです。
public abstract class DummyFactory {
public static MyClass createNew() {
// code for returning a new instance of MyClass
}
}
ただし、XMLドキュメントをアンマーシャリングしようとすると、次の例外が発生します。
Exception [EclipseLink-171] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The factory class does not define a public default constructor, or the constructor raised an exception.
Internal Exception: java.lang.InstantiationException
最初はファクトリクラスとメソッドの説明で正しく何かが得られないと思いましたが、次にJAXB RIを試してみましたが、これは問題なく機能しています。だから私の質問は:
MOXyを抽象ファクトリクラスで動作させる方法はありますか?
(JAXB RIは私に他の種類の問題を与えています、それが私がそれを使用したくない理由です)。