Я пишу пакетное задание для чтения XML-файла с верхним и нижним колонтитулом.
<?xml version="1.0" encoding="utf-8"?>
<File>
<Hdr>
<hdrField1>1644</hdrField1>
<hdrField2>670</hdrField2>
<hdrField3>00000001</hdrField3>
</Hdr>
<TxnBlock>
<Txn>
<txnField1>1644</txnField1>
<txnField2>670</txnField2>
<txnField3>00000001</txnField3>
</Txn>
<Txn>
...............
</Txn>
<Txn>
...............
</Txn>
</TxnBlock>
<Trl>
<trlField1>1644</trlField1>
<trlField2>670</trlField2>
<trlField3>00000001</trlField3>
</Trl>
</File>
Я использую Jaxb2Marshaller
@StepScope
public StaxEventItemReader<XmlVo> xmlReader()
throws MalformedURLException {
String fileName="011SBIN00200011924701.xml";
StaxEventItemReader<XmlVo> reader = new StaxEventItemReader<>();
reader.setResource(new FileSystemResource(fileName));
reader.setFragmentRootElementNames(new String[] { "File","Hdr","Trl","Txn" });
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(XmlVo.class,
HeaderVo.class,FooterVo.class,TxnVo.class);
reader.setUnmarshaller(marshaller);
return reader;
}
@XmlRootElement(name = "File")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlVo {
@XmlElement(name="Hdr")
private HeaderVo Hdr;
@XmlElement(name="Trl")
private FooterVo Trl;
@XmlElement(name="TxnBlock")
private TxnBlockVo TxnBlock;
/*@XmlElement(name="Txn") //
private List<TxnVo> txn;*/
//getter setter
}
@XmlRootElement(name = "TxnBlock")
@XmlAccessorType(XmlAccessType.FIELD)
public class TxnBlockVo {
@XmlElement(name="Txn") //
private List<TxnVo> txn;
//getter setter
}
Я могучитать данные из файла. Проблема в том, что я не получаю записи по частям. Размер моего чанка равен 5, и файл содержит почти 1000 фрагментов Txn, но весь файл читается как один.
Я пытался вставить List<TxnVo>
в XmlVo.class
. Но исключение nullpoint возникает в процессоре, когда я пытаюсь прочитать значение из списка Txn.
При чтении только фрагмента Txn обработка выполняется идеально. Но мне нужно также прочитать верхний и нижний колонтитулы.
Является ли моя обработка правильной? Как реализовать пакетную обработку в XML-файле с записями верхнего и нижнего колонтитула?
Заранее спасибо .?