Я создаю приложение, которое будет содержать данные в XML-файле.JAXB Inheritance + XMLAdapter (HasMap)
Я застрял прямо сейчас с одной проблемой: JAXB не сортирует мой дочерний класс, поэтому, когда я umarshall XML-файл, все объекты являются объектами класса родителя. Я пробовал некоторые варианты с @XMLSeeAlso
, AccessType.FIELD
и JAXBContext jaxbContext = JAXBContext.newInstance(Important.class, Parent.class, Child.class);
, но похоже, что я пропустил что-то, что-то не понял, и он не работает.
Не могли бы вы дать мне несколько советов? Какие аннотации следует использовать? или mb XMLAdapter? Нынешняя структура моего проекта (я пытался упростить):
Main.java
public class Main {
public static void main(String args[]){
JAXB jaxb = new JAXB();
Parent parent = new Parent(1);
Child child = new Child(2,3)
Important important = new Important();
jaxb.write(important);
}
}
Important.java
@XmlRootElement(name="important")
public class Important {
public Map<Integer, Parent> hashMap;
//some code here
}
Parent.java
public class Parent{
public int parentField;
//constructor
}
Child.java
public class Child extends Parent {
public int childField;
//constructors
}
И простой класс JAXB. JAXB.java
public class JAXB {
public void write(Important important) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Important.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(important, System.out);
} catch (JAXBException e) {
System.err.println(e + "Error.");
}
}
}
Но после того, как сортировочная возвращает XML, который не содержит никакой информации о ребенке.
<important>
<hashMap>
<entry>
<key>0</key>
<value>
<parentField>1</parentField>
</value>
</entry>
<entry>
<key>0</key>
<value>
<parentField>2</parentField>
</value>
</entry>
</hashMap>
, а затем закрывающий тег.
Моя карта 100% содержит различные типы классов: родитель и ребенок
Любые мысли?
WTF ... это работает. Я не знаю, что я сделал раньше, но теперь он работает – Ivan
Кстати, я удалил аннотацию @XMLAccessorType из-за некоторых проблем – Ivan