StaxItemReader读取和打印值

时间:2017-03-16 12:26:31

标签: java spring-boot spring-batch

我现在正在学习春季批次。我想使用StaxEventItemReaderto读取xml文件 所以我只是尝试在java透视图中的独立java文件中使用它,并使用所有必需的spring jar。

我想知道如何确定它是否已读取值以及已读取的值。简而言之,我想在控制台中打印读取值。我怎么能在独立的java文件中做到这一点?

代码如下:

    main(){
    StaxEventItemReader<Student> xmlFileReader = new StaxEventItemReader<Student>();
    xmlFileReader.setResource(new ClassPathResource("/Student.xml"));
    xmlFileReader.setFragmentRootElementName("Marks");

    Jaxb2Marshaller medicareMarshaller = new Jaxb2Marshaller();
    medicareMarshaller.setClassesToBeBound(Student.class);
    xmlFileReader.setUnmarshaller(medicareMarshaller);
    System.out.println(xmlFileReader. ?);
}

请帮助我了解如何打印读取值。如果我的内容不清楚,我道歉。提前致谢。

1 个答案:

答案 0 :(得分:0)

请尝试下面的改编代码。 通常,如果要测试SpringBatch组件而不将它们实例化为Spring-Beans( - >通过直接调用der Constructor),则应在调用所有set-Methods后调用“afterPropertiesSet()”方法。 / p>

接下来,根据您想直接测试的读者/作者,您必须调用reader.open(new ExecutionContext())。

之后,你可以调用read() - 方法,然后按项目返回项目。

main(){
StaxEventItemReader<Student> xmlFileReader = new StaxEventItemReader<Student>();
xmlFileReader.setResource(new ClassPathResource("/Student.xml"));
xmlFileReader.setFragmentRootElementName("Marks");

Jaxb2Marshaller medicareMarshaller = new Jaxb2Marshaller();
medicareMarshaller.setClassesToBeBound(Student.class);
xmlFileReader.setUnmarshaller(medicareMarshaller);

xmlFileReader.afterPropertiesSet(); // in the case of StaxEventItemReader not really necessary

xmlFileReader.open(new ExecutionContext()); // does some initialisation, so you need to call it

Studen student = null;
while(student = xmlFileReader.read() != null) {
    System.out.println(student...);   
}

xmlFileReader.close();