JAXB Marshalling - расширение существующего класса

Мне нужно создать серию объектов Java через XML с использованием JAXB, которые расширяют уже созданный общий базовый класс (без использования JAXB). Например, предположим, что у меня есть следующие классы JAXB, которые я пытаюсь создать:

Penguin.xml  -> Penguin.java
Robin.xml -> Robin.java
Cardinal.xml -> Cardinal.java

У меня уже есть существующий базовый класс с именем Bird.java, который я хочу расширить тремя вышеупомянутыми классами.

Как лучше всего это сделать?

Спасибо за вашу помощь!


person risingTide    schedule 20.02.2012    source источник


Ответы (1)


Это очень просто: вам нужно создать файл привязки JAXB со следующим содержимым:

<jaxb:bindings version="1.0"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
>

    <jaxb:globalBindings>
        <!-- All beans should extend this base class: -->
        <xjc:superClass name="org.mycompany.common.Bird" />
    </jaxb:globalBindings>

</jaxb:bindings>

Дополнительную информацию об этой опции (и других интересных вещах) можно найти здесь.

person dma_k    schedule 22.02.2012
comment
Есть ли способ указать классы ведьм, расширяющие класс Bird. Что, если я хочу, чтобы только Робин и Кардинал расширили класс Bird? - person Chobicus; 08.08.2012
comment
+1 также, если вы получаете сообщение об ошибке: привязки расширения поставщика (jaxb: extensionBindingPrefixes) не разрешены в строгом режиме. вы должны использовать -extension, если в maven pom используйте: ‹configuration› ‹args› ‹arg› -extension ‹/arg› ... в maven-jaxb2-plugin - person user1697575; 30.05.2013
comment
@Chobicus: Ответ на ваш вопрос дан здесь, в частности, вам нужно активировать плагин наследования. - person dma_k; 31.05.2013