Spring Boot-batch - Einlesen von XML-input - konvertiert Elemente zur Liste
Habe ich code einen batch-service, der mit Spring Boot, das liest eine XML-Datei als Eingabe.
Die Struktur der XML-Eingabedatei sieht wie folgt aus, und ich kann es nicht ändern :
<root>
<parent>
<field1>string</field1>
<field2>string</field2>
<field3>string</field2>
<child>
<fieldA>string</fieldA>
<fieldB>string</fieldB>
</child>
<child>
<fieldA>string</fieldA>
<fieldB>string</fieldB>
</child>
<child>
<fieldA>string</fieldA>
<fieldB>string</fieldB>
</child>
</parent>
</root>
Habe ich meine Java-Klassen :
public class Parent {
private String field1;
private String field2;
private String field3;
private List<Child> children;
//Getters and setters...
}
public class Child {
private String fieldA;
private String fieldB;
//Getters and setters...
}
Und hier ist mein reader in der batch-Konfiguration-Klasse :
@Bean
public ItemReader<Object> reader(){
StaxEventItemReader<Object> reader = new StaxEventItemReader<Object>();
reader.setResource( new ClassPathResource("input.xml") );
reader.setFragmentRootElementName("parent");
XStreamMarshaller unmarshaller = new XStreamMarshaller();
Map<String, Class> aliases = new HashMap<String, Class>();
aliases.put( "parent", Parent.class );
aliases.put( "child", Child.class );
unmarshaller.setAliases(aliases);
reader.setUnmarshaller( unmarshaller );
return reader;
}
Jetzt muss ich nur noch versuchen richtig zu Lesen.
Aber wenn ich die batch, ich habe einen Fehler :
org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field foo.bar.Parent.child
Verstehe ich diesen Fehler, aber ich kann nicht einen Weg finden, zu korrigieren, mein code.
Ich habe versucht, zu erstellen eine gefälschte setter in Übergeordneten, indem man das Kind auf die Kinder-Liste. Aber es scheint nicht zu funktionieren.
Irgendeine Idee ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst mit Jaxb2Marshaller statt XStreamMarshaller :
Sowie Java-beans :
Dieser funktioniert gut, auch mit den automatisch erzeugten Getter und setter : ich wieder eine Liste der Kinder-Elemente.
benennen Sie diese Eigenschaft:
zu
und erstellen von getter-und setter-Methoden.