Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.springframework.batch.item.file.FlatFileParseException:_Java_Spring_Batch Processing - Fatal编程技术网

Java org.springframework.batch.item.file.FlatFileParseException:

Java org.springframework.batch.item.file.FlatFileParseException:,java,spring,batch-processing,Java,Spring,Batch Processing,错误 Parsing error at line: 1 in resource=[file [C:\Users\satish_pahuja\Desktop\BO_Office_Acc_Ext.txt]], input=[BOOfficeAccExt,B0001,00006746464646,S0001,BA0001,A,ABC,XYZ,UID,SatishPahuja,SatishPahuja,090909,151512] at org.springframework.batch.ite

错误

Parsing error at line: 1 in resource=[file [C:\Users\satish_pahuja\Desktop\BO_Office_Acc_Ext.txt]], input=[BOOfficeAccExt,B0001,00006746464646,S0001,BA0001,A,ABC,XYZ,UID,SatishPahuja,SatishPahuja,090909,151512]
    at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:183)
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.read(AbstractItemCountingItemStreamItemReader.java:83)
    at gov.in.dop.rsi.mgnregs.batch.FileBatchReader.read(FileBatchReader.java:38)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.read(SimpleChunkProvider.java:155)
    at org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:114)
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368)
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.provide(SimpleChunkProvider.java:108)
    at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:69)
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:395)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)
    at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:267)
    at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:77)
    at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368)
    at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
    at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)
    at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:253)
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:195)
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:137)
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:152)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:131)
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:301)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:127)
    at gov.in.dop.rsi.mgnregs.batch.BatchProcessExtract.main(BatchProcessExtract.java:29)
Caused by: java.lang.NullPointerException
    at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.getBean(BeanWrapperFieldSetMapper.java:230)
    at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.mapFieldSet(BeanWrapperFieldSetMapper.java:185)
    at org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine(DefaultLineMapper.java:43)
    at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:180)
    ... 30 more

Sep 15, 2015 3:04:54 PM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 run
INFO: Job: [FlowJob: [name=batchExtracts]] completed with the following parameters: [{}] and the following status: [FAILED]
Exit Status : FAILED
Done
job report.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch" xmlns:task="http://www.springframework.org/schema/task"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:orcl="http://www.springframework.org/schema/data/orcl"
    xsi:schemaLocation="http://www.springframework.org/schema/batch
        http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
        http://www.springframework.org/schema/beans

               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/data/orcl
       http://www.springframework.org/schema/data/orcl/spring-data-orcl-1.0.xsd">

    <batch:job id="batchExtracts">
        <batch:step id="step1">
            <batch:tasklet transaction-manager="transactionManager">
                <batch:chunk reader="cvsFileItemReader" writer="csvFileItemWriter"
                    processor="csvFileItemProcessor" commit-interval="20" />
            </batch:tasklet>
        </batch:step>
    </batch:job>

    <bean id="cvsFileItemReader" class="gov.in.dop.rsi.mgnregs.batch.FileBatchReader">
    </bean>

    <bean id="csvFileItemProcessor" class="gov.in.dop.rsi.mgnregs.batch.FileBatchProcessor">
    </bean>

    <bean id="csvFileItemWriter" class="gov.in.dop.rsi.mgnregs.batch.FileBatchWriter">
    </bean>

</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

    <!-- stored job-meta in database -->
    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
        <property name="transactionManager" ref="transactionManager" />
    </bean>

    <!-- stored job-meta in memory -->

    <bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository" />
    </bean>

<bean id="transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

</beans>
我遇到了这个错误,并尝试了很多方法,比如在txt文件中删除值之间的空格,在所有值中添加双倒逗号。请帮我做这个

package gov.in.dop.rsi.mgnregs.batch;

import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.core.io.FileSystemResource;

public class FileBatchReader<BoOfficeAccExtract> implements ItemReader {

    public BoOfficeAccExtract read() throws Exception, UnexpectedInputException,
    ParseException, NonTransientResourceException {

        System.out.println("Inside read method-0-");

        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setNames(new String[] {"extFileName","boId","officeAccountNo","solId" ,"bankId","ind","freeField1","freeField2","freeField3","modifiedBy","createdBy","modifiedDate","createdDate"});

        BeanWrapperFieldSetMapper<BoOfficeAccExtract> fieldSetMapper = new BeanWrapperFieldSetMapper<BoOfficeAccExtract>();
        fieldSetMapper.setPrototypeBeanName("BoOfficeAccExtract");

        DefaultLineMapper<BoOfficeAccExtract> lineMapper = new DefaultLineMapper<BoOfficeAccExtract>();

        lineMapper.setLineTokenizer(lineTokenizer);
        lineMapper.setFieldSetMapper(fieldSetMapper);

        FlatFileItemReader<BoOfficeAccExtract> reader = new FlatFileItemReader<BoOfficeAccExtract>();
        reader.setResource(new FileSystemResource("C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt"));
        reader.setLineMapper(lineMapper);


        reader.open(new ExecutionContext());
        BoOfficeAccExtract boOfficAccExtract=reader.read();

        return boOfficAccExtract;
    }
}
package.gov.in.dop.rsi.mgnregs.batch;
导入org.springframework.batch.item.ExecutionContext;
导入org.springframework.batch.item.ItemReader;
导入org.springframework.batch.item.NonTransientResourceException;
导入org.springframework.batch.item.ParseException;
导入org.springframework.batch.item.UnexpectedInputException;
导入org.springframework.batch.item.file.FlatFileItemReader;
导入org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
导入org.springframework.batch.item.file.mapping.DefaultLineMapper;
导入org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
导入org.springframework.core.io.FileSystemResource;
公共类FileBatchReader实现ItemReader{
public BoOfficeAccExtract read()引发异常,未预料的PutException,
ParseException,非TransientResourceException{
System.out.println(“内部读取方法-0-”;
DelimitedLineTokenizer lineTokenizer=新的DelimitedLineTokenizer();
lineTokenizer.setNames(新字符串[]{“extFileName”、“boId”、“officeAccountNo”、“solId”、“bankId”、“ind”、“freeField1”、“freeField2”、“freeField3”、“modifiedBy”、“createdBy”、“modifiedDate”、“createdDate”});
BeanRapperFieldSetMapper=新的BeanRapperFieldSetMapper();
fieldSetMapper.setPrototypeBeanName(“BoOfficeAccExtract”);
DefaultLineMapper lineMapper=新的DefaultLineMapper();
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(fieldSetMapper);
FlatFileItemReader=新的FlatFileItemReader();
setResource(新文件系统资源(“C:\\Users\\satish\u pahuja\\Desktop\\BO\u Office\u Acc\u Ext.txt”);
reader.setLineMapper(lineMapper);
reader.open(新的ExecutionContext());
BoOfficeAccExtract boofficextract=reader.read();
返回boofficextract;
}
}

对于初学者来说,放下你那丑陋的阅读器,每次调用
read()
,你都在一遍又一遍地读同一行。只需使用配置,而不是包装读卡器的读卡器

这也是因为
beanwrapperfiedsetmapper
需要
BeanFactory
(它实现了
BeanFactoryAware
,但由于您的设置从未被调用

基本上,删除您的读卡器,只需在XML中配置它。用以下内容替换
cvsFileItemReader
bean定义(修复我没有包含的包)


或者您可以使用基于Java的配置而不是XML

@Configuration
public class CsvJobConfiguration {

    @Bean
    public FlatFileItemReader cvsFileItemReader() {
        FlatFileItemReader reader = new FlatFileItemReader();
        reader.setResource(new FileSystemResource("C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt"));
        reader.setLineMapper(csvLineMapper());
        return reader;
    }

    @Bean
    public LineMapper<BoOfficeAccExtract> csvLineMapper() {
        DefaultLineMapper<BoOfficeAccExtract> lineMapper = new DefaultLineMapper<BoOfficeAccExtract>();
        lineMapper.setLineTokenizer(csvLineTokenizer());
        lineMapper.setFieldSetMapper(csvFieldSetMapper());
        return lineMapper;
    }

    @Bean
    public LineTokenizer csvLineTokenizer() {
        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setNames(new String[] {"extFileName","boId","officeAccountNo","solId" ,"bankId","ind","freeField1","freeField2","freeField3","modifiedBy","createdBy","modifiedDate","createdDate"});
        return lineTokenizer;
    }

    @Bean
    public FieldSetMapper csvFieldSetMapper() {
        BeanWrapperFieldSetMapper<BoOfficeAccExtract> fieldSetMapper = new BeanWrapperFieldSetMapper<BoOfficeAccExtract>();
        fieldSetMapper.setPrototypeBeanName("BoOfficeAccExtract");
        return fieldSetMapper;
    }


}
@配置
公共类CsvJobConfiguration{
@豆子
公共FlatFileItemReader cvsFileItemReader(){
FlatFileItemReader=新的FlatFileItemReader();
setResource(新文件系统资源(“C:\\Users\\satish\u pahuja\\Desktop\\BO\u Office\u Acc\u Ext.txt”);
setLineMapper(csvLineMapper());
返回读取器;
}
@豆子
公共测线器csvLineMapper(){
DefaultLineMapper lineMapper=新的DefaultLineMapper();
setLineTokenizer(csvLineTokenizer());
setFieldSetMapper(csvFieldSetMapper());
返回线映射器;
}
@豆子
公共行标记器csvLineTokenizer(){
DelimitedLineTokenizer lineTokenizer=新的DelimitedLineTokenizer();
lineTokenizer.setNames(新字符串[]{“extFileName”、“boId”、“officeAccountNo”、“solId”、“bankId”、“ind”、“freeField1”、“freeField2”、“freeField3”、“modifiedBy”、“createdBy”、“modifiedDate”、“createdDate”});
返回线标记器;
}
@豆子
公共字段集映射器csvFieldSetMapper(){
BeanRapperFieldSetMapper=新的BeanRapperFieldSetMapper();
fieldSetMapper.setPrototypeBeanName(“BoOfficeAccExtract”);
返回字段集映射器;
}
}

BoOfficeAccExtract是一个简单的POJO类。请描述一下你的代码应该做什么。没有名为
BoOfficeAccExtract的bean,
而且你的配置/读卡器坏了……你到底为什么要用读卡器包装一个reder,每次调用都要重新打开它?Wy不仅仅是把它放在配置中?我必须使用spri实现代码ng批处理将从txt文件中读取信息,该文件将具有逗号分隔的值并写入数据库。但我在仅读取时收到错误。不,您不知道。我强烈建议您阅读Spring批处理文档,了解它的工作原理和作用。您的代码是问题所在,编写代码是因为您不知道了解框架的工作原理。我真的希望您的处理器和写入程序不一样,因为这会导致问题。如果我想使用customReader类而不是基于xml的配置,那么解决方案是什么。@Deinum请查找上面更新的读卡器类,但仍然无法工作。将来我必须从FTP服务器和如果我只使用基于xml的配置,那怎么可能呢?xml或java配置无关紧要。你的阅读器有缺陷,它不会工作。如果你想要FTP,我强烈建议将Spring集成与Spring批处理结合起来(用于本地系统上的文件轮询或远程轮询)这将使它完全透明。基本上资源来自哪里并不重要。
package gov.in.dop.rsi.mgnregs.batch;

import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.core.io.FileSystemResource;

public class FileBatchReader<BoOfficeAccExtract> implements ItemReader {

    public BoOfficeAccExtract read() throws Exception, UnexpectedInputException,
    ParseException, NonTransientResourceException {

        System.out.println("Inside read method-0-");

        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setNames(new String[] {"extFileName","boId","officeAccountNo","solId" ,"bankId","ind","freeField1","freeField2","freeField3","modifiedBy","createdBy","modifiedDate","createdDate"});

        BeanWrapperFieldSetMapper<BoOfficeAccExtract> fieldSetMapper = new BeanWrapperFieldSetMapper<BoOfficeAccExtract>();
        fieldSetMapper.setPrototypeBeanName("BoOfficeAccExtract");

        DefaultLineMapper<BoOfficeAccExtract> lineMapper = new DefaultLineMapper<BoOfficeAccExtract>();

        lineMapper.setLineTokenizer(lineTokenizer);
        lineMapper.setFieldSetMapper(fieldSetMapper);

        FlatFileItemReader<BoOfficeAccExtract> reader = new FlatFileItemReader<BoOfficeAccExtract>();
        reader.setResource(new FileSystemResource("C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt"));
        reader.setLineMapper(lineMapper);


        reader.open(new ExecutionContext());
        BoOfficeAccExtract boOfficAccExtract=reader.read();

        return boOfficAccExtract;
    }
}
<bean id="cvsFileItemReader" class="FlatFileItemReader">
    <property name="resource" value="C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt" />
    <property name="lineMapper">
        <bean class="DefaultLineMapper">
            <property name="lineTokenizer">
                <bean class="DelimitedLineTokenizer">
                    <property name="names" value="extFileName,boId,officeAccountNo,solId,bankId,ind,freeField1,freeField2,freeField3,modifiedBy,createdBy,modifiedDate,createdDate" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="BoOfficeAccExtract" />
                </bean>
            </property>
        </bean>
    </property>
</bean>
@Configuration
public class CsvJobConfiguration {

    @Bean
    public FlatFileItemReader cvsFileItemReader() {
        FlatFileItemReader reader = new FlatFileItemReader();
        reader.setResource(new FileSystemResource("C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt"));
        reader.setLineMapper(csvLineMapper());
        return reader;
    }

    @Bean
    public LineMapper<BoOfficeAccExtract> csvLineMapper() {
        DefaultLineMapper<BoOfficeAccExtract> lineMapper = new DefaultLineMapper<BoOfficeAccExtract>();
        lineMapper.setLineTokenizer(csvLineTokenizer());
        lineMapper.setFieldSetMapper(csvFieldSetMapper());
        return lineMapper;
    }

    @Bean
    public LineTokenizer csvLineTokenizer() {
        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setNames(new String[] {"extFileName","boId","officeAccountNo","solId" ,"bankId","ind","freeField1","freeField2","freeField3","modifiedBy","createdBy","modifiedDate","createdDate"});
        return lineTokenizer;
    }

    @Bean
    public FieldSetMapper csvFieldSetMapper() {
        BeanWrapperFieldSetMapper<BoOfficeAccExtract> fieldSetMapper = new BeanWrapperFieldSetMapper<BoOfficeAccExtract>();
        fieldSetMapper.setPrototypeBeanName("BoOfficeAccExtract");
        return fieldSetMapper;
    }


}