Hallo erstmal,
das Problem ist dieses: Ich habe eine (in diesem Fall stark verkürzte) Klasse Payload:
Wenn ich das Attribut "value" einer Instanz dieser Klasse z.B. mit einem String fülle, der bei JAXB Out-of-the-Box dabei ist, und dann marshalle, bekomme ich ein korrektes Ergebnis:
[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<payload>
<value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Test</value>
</payload>
[/XML]
Mit Arrays und eigenen Typen funktioniert das auch noch.
Wenn ich aber eine Liste als "value" verwende:
Dann bekomme ich folgendes Ergebnis:
[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<payload>
<value xsi:type="arrayList" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</payload>
[/XML]
Wie offensichtlich sein sollte, wird die ArrayList als normaler Typ dargestellt, und JAXBs Methode zum marshallen von Collections greift icht.
Meine Frage: Gibt es eine Möglichkeit, dass JAXB auch Listen im "Payload" richtig serialisiert?
das Problem ist dieses: Ich habe eine (in diesem Fall stark verkürzte) Klasse Payload:
Java:
@XmlRootElement
private static class Payload<T> {
@XmlElement
private T value;
}
Wenn ich das Attribut "value" einer Instanz dieser Klasse z.B. mit einem String fülle, der bei JAXB Out-of-the-Box dabei ist, und dann marshalle, bekomme ich ein korrektes Ergebnis:
[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<payload>
<value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Test</value>
</payload>
[/XML]
Mit Arrays und eigenen Typen funktioniert das auch noch.
Wenn ich aber eine Liste als "value" verwende:
Java:
Payload<List<String>> payload = new Payload<List<String>>();
payload.value = new ArrayList<String>();
// Liste füllen ...
JAXBContext context = JAXBContext.newInstance(Payload.class, ArrayList.class); // ArrayList muss registriert werden, da JAXB die Liste offensichtlich nicht erkennen kann
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter serialized = new StringWriter();
marshaller.marshal(payload, serialized);
System.out.println(serialized);
Dann bekomme ich folgendes Ergebnis:
[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<payload>
<value xsi:type="arrayList" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</payload>
[/XML]
Wie offensichtlich sein sollte, wird die ArrayList als normaler Typ dargestellt, und JAXBs Methode zum marshallen von Collections greift icht.
Meine Frage: Gibt es eine Möglichkeit, dass JAXB auch Listen im "Payload" richtig serialisiert?
Zuletzt bearbeitet: