Я определяю статический фабричный метод с помощью:
@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 вызывает у меня другие проблемы, поэтому я бы предпочел не использовать его).