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 ?

InformationsquelleAutor Eria | 2015-10-09
Schreibe einen Kommentar