У меня проблемы с дакастингом в JAXB с классами, которые ссылаются на себя.
Моя настройка:
@XmlRootElement
class IdentifiableObject {
@XmlID
@XmlAttribute
String id;
@XmlAttribute
String name;
}
@XmlRootElement
class Node extends IdentifiableObject {
@XmlElement
@XmlJavaAdapter(SimpleAdapterThatJustDowncastsToIdentifiableObject.class)
Node parent;
@XmlElement
String aField;
}
Я сделал это с множеством других объектов, и этоработает отлично.Но когда я использую класс, который ссылается на себя, он не работает.
Есть ли что-то, что я могу сделать, чтобы это исправить?Я знаю, что использование XmlID / XmlIDREF вроде решает проблему, но я действительно хочу больше, чем просто ссылка (я хочу идентификатор и имя от идентифицируемого)
Чтобы уточнить, это то, что я получаю:
<nodes>
<node id="49ad1cb6-f6fe-47f9-a544-4a1c6337c4a5" name="Node 1">
<aField>This is Node 1</aField>
</node>
<node id="0a1d1895-49e1-4079-abc1-749c304cc5a2" name="Node 2">
<parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="node" id="49ad1cb6-f6fe-47f9-a544-4a1c6337c4a5" name="Node 1">
<aField>This is Node 1</aField>
</parent>
<aField>This is Node 2</aField>
</node>
</nodes>
И это то, что я хочу:
<nodes>
<node id="49ad1cb6-f6fe-47f9-a544-4a1c6337c4a5" name="Node 1">
<aField>This is Node 1</aField>
</node>
<node id="0a1d1895-49e1-4079-abc1-749c304cc5a2" name="Node 2">
<parent id="49ad1cb6-f6fe-47f9-a544-4a1c6337c4a5" name="Node 1"/>
<aField>This is Node 2</aField>
</node>
</nodes>
ОБНОВЛЕНИЕ: просто примечание здесь, schemagen действительно делает правильную вещь.Так что это может быть ошибка в JAXB RI.
С уважением, Мортен