JAXB @XMLREFID не сохраняет поле @XMLID при сортировке

У меня есть класс (Bundle), который содержит ссылку на «родительский» экземпляр Bundle. Это используется для записи того, из какого объекта был «скопирован» новый Bundle. Этот класс содержится в списке‹> другого класса (основного) и сам содержит список‹> (разных) дочерних классов (элементов).

При сохранении в XML атрибут ссылки содержит идентификаторы элементов, содержащихся в родительском пакете, а НЕ идентификатор родительского пакета.

Мой вопрос: как я могу заставить Bundle.parent отображаться как Bundle.id в XML?

Далее следуют фрагменты кода, все классы имеют доступ к FIELD.

public class Element {
    @XmlID
    @XmlAttribute
    public String id;
}

public class Bundle extends AbstractList<Element> {
    @XmlID
    @XmlAttribute
    public String id;

    @XmlElementWrapper
    @XmlElemet(name = "element")
    @XmlIDREF
    public List<Element> elements;

    @XmlElement
    public Bundle parent;
}

public class Main AbstractList<Bundle> {
    @XmlAttribute
    @XmlID
    public String id;

    @XmlElementWrapper
    @XmlElement(name = "bundle")
    public List<Bundle> bundles; 

    @XmlElementWrapper
    @XmlElement(name = "masterBundle")
    static final public List<Bundle> masterBundles; 
}

final JAXBContext jc = JAXBContext.newInstance(Main.class);

Поле Bundle.parent обычно представляет собой от Bundle in bundles до Bundle in masterBundles. Вот пример вывода:

<masterBundles>
    <bundle id="999594e2-043d-45ed-9ee3-34b11e6297fd" name="Bundle1">
        <elements>
            <element>4501a2e5-05af-4760-92be-29dacb2e2d70</element>
            <element>449cec85-7eb7-4ba9-b03e-2b5708bee076</element>
        </elements>
    </bundle>
</masterBundles>
<bundles>
    <bundle id="7e07ae32-2bcc-49db-be0b-f04ab53f75e0" name="New Bundle">
        <elements>
            <element>4501a2e5-05af-4760-92be-29dacb2e2d70</element>
            <element>449cec85-7eb7-4ba9-b03e-2b5708bee076</element>
        </elements>
        <parent>4501a2e5-05af-4760-92be-29dacb2e2d70</parent>
        <parent>449cec85-7eb7-4ba9-b03e-2b5708bee076</parent>
    </bundle>
</bundles>

Обновление: кажется, я обнаружил проблему: JAXB рассматривает родительский элемент как коллекцию (которой она и является), поэтому сбрасывает все элементы коллекции! Раздражающий.


person Ian    schedule 30.12.2012    source источник
comment
Я понятия не имею, могу ли я пометить это ответом или просто оставить его открытым?   -  person Ian    schedule 31.12.2012
comment
Если вы используете MOXy в качестве поставщика JAXB (JSR-222), вы можете использовать его внешний документ сопоставления, чтобы переопределить супертип, чтобы ваш вариант использования работал: stackoverflow.com/questions/10075634/   -  person bdoughan    schedule 31.12.2012