2

当我运行一个春季批处理项目时,发生了异常!

异常详情:

Caused by: java.lang.NullPointerException: null
at org.springframework.batch.item.xml.StaxEventItemReader.moveCursorToNextFragment(StaxEventItemReader.java:141) 

文件名是正确的!

配置代码:

@Bean
@StepScope
public StaxEventItemReader xmlFileItemReader(@Value("#{jobParameters['fileType']}") String fileType,
                                             @Value("#{jobExecutionContext['extractFileName']}") String fileName) throws Exception {

    System.out.println("======================== fileName =========================="+fileName);

    StaxEventItemReader reader = new StaxEventItemReader();

    reader.setResource(new FileSystemResource(fileName));
    reader.setFragmentRootElementName("PortData");
    reader.setUnmarshaller(unmarshaller());

    reader.afterPropertiesSet();

    return reader;
}
4

3 回答 3

6

我希望我能对 Padis 的回应发表评论,因为它让我走上了寻找解决方案的轨道。

我在@StepScope 范围内的读取器和写入器遇到了相同的 nullPointerException 问题。Padis 是完全正确的,当他这样写时,当 @Bean的类型是ItemReader或者函数没有被调用时(它会导致)ItemWriterdoOpen()NullPointerException

碰巧,将我的豆子的类型从ItemReader<T>toItemStreamReader<T>ItemWriter<T>to更改ItemStreamWriter<T>为我的解决方案。

于 2015-06-08T17:15:31.567 回答
0

我现在有类似的问题。不调用@StepScope读取器方法上的设置。open()

TaskletStep执行步骤时调用open()CompositeItemStream它在每个 ItemStream 上调用 open。阅读器@StepScope似乎没有设置在CompositeItemStream.

确保步骤生成器将您的阅读器注册到SimpleStepBuilder.registerAsStreamsAndListeners(). 我遇到的问题是我的 reader bean 的类型是ItemReader并且代理注册它不是ItemStream. 将我的 reader bean 的类型更改为ItemStream( StaxEventItemReader) 解决了这个问题。

于 2014-03-22T21:19:28.417 回答
0

在所有检查此线程并检查您的 xml 文件是否由单个对象元素组成之前,例如:

<Object>
  <child1>...</child1>
  <child2>...</child2>
  <child3>...</child3>
</Object>

因为 StAX 阅读器实现适用于像

<root>
  <Object>...</Object>
  <Object>...</Object>
<root>

如果这解决了问题,请停止阅读!否则显然您的配置中没有错误。

假设最新版本(2.2.1.RELEASE)
错误在这一行StaxEventItemReader.moveCursorToNextFragment()

while (reader.peek() != null && !reader.peek().isStartElement()) {

所以,很可能,reader是空的;或者你有解组的问题,读者会遇到麻烦。
是在第一次读取时还是在随机读取次数后抛出错误?检查断点StaxEventItemReader.doOpen()或设置日志级别以进行调试并查看是否出现问题-

于 2013-08-22T11:05:58.140 回答