Я пытаюсь использовать JAXB для отмены вызова некоторого XML, но получаю исключение «Невозможно создать экземпляр ...».Я понимаю почему - он пытается создать экземпляр абстрактного класса.Я хочу, чтобы он сделал экземпляр определенного реализующего класса.Моя цель состоит в том, чтобы иметь специфичные для класса проверки на методах установки.Возможно, «qux» является допустимым базовым значением для BarImpl, но BarImpl2 хочет сделать что-то еще.
Я получил часть пути, не аннотируя Foo, но если я аннотирую bar, все становится ужасно.
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.junit.Test;
public class JAXBTest {
@Test
public void test() throws javax.xml.bind.JAXBException {
String xml =
"<foo>" +
" <bar>" +
" <baz>qux</baz>" +
" </bar>" +
"</foo>";
javax.xml.bind.JAXBContext context = javax.xml.bind.JAXBContext.newInstance(
FooImpl.class,
BarImpl.class
);
javax.xml.bind.Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshal(new java.io.StringReader(xml));
}
@XmlRootElement(name="foo")
public static abstract class Foo {
@XmlElement(name="bar")
Bar bar;
}
@XmlRootElement(name="bar")
public static abstract class Bar {
@XmlElement(name="baz")
String baz;
}
public static class FooImpl extends Foo { }
public static class BarImpl extends Bar { }
}