Hallo ich möchte mit JAXB meine Daten in XML speichern. Ich habe allerdings keine Ahnung, wie ich nur Referenzen speichern kann. Ich habe schon lange gesucht und nichts gefunden. Wenn ich das mit @XMLID und @XMLIDREF versuche, erhalte ich zwar die Schlüssel, aber die Objekte, die die Daten enthalten sind nirgendwo zu finden. Im Beispiel unten sind die IDs der Personen, aber nicht die zugehörigen Personen Objekte. Wie kann ich die zusätzlich speichern?
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<company>
<companyNo>c101</companyNo>
<name>JAXB Company1</name>
<employee>
<person>p101</person>
<person>p202</person>
<person>p303</person>
</employee>
</company>
Java:
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlID
private String pId;
private String name;
}
Java:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {
private String companyNo;
private String name;
@XmlElementWrapper(name="employee")
@XmlElement(name="person")
@XmlIDREF
private List<Person> employee;
}
Java:
public class CompanyExport {
public static void main(String[] args) throws FileNotFoundException, IOException {
List<Person> employee = new ArrayList<Person>();
Person p1 = new Person();
p1.setName("Name1");
p1.setPId("p101");
employee.add(p1);
Person p2 = new Person();
p2.setName("Name2");
p2.setPId("p202");
employee.add(p2);
Person p3 = new Person();
p3.setName("Name3");
p3.setPId("p303");
employee.add(p3);
Company c = new Company();
c.setEmployee(employee);
c.setCompanyNo("c101");
c.setName("JAXB Company1");
try (FileOutputStream out = new FileOutputStream(new File("CompanyExport.xml"))){
JAXBContext context = JAXBContext.newInstance(Company.class);
Marshaller jMarshall = context.createMarshaller();
jMarshall.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jMarshall.marshal(c, out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}