相关文章推荐
害羞的小熊猫  ·  Spring Cloud Azure ...·  2 月前    · 
安静的便当  ·  ThingsBoard CE v2.4.0 ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Error

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

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>

context.xml

<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>

FileBatchReader.java

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;
import org.springframework.core.io.Resource;
public class FileBatchReader<BoOfficeAccExtract> implements ItemReader {
    public BoOfficeAccExtract read() throws Exception, UnexpectedInputException,
    ParseException, NonTransientResourceException {
        System.out.println("Inside read method-0-");
        FlatFileItemReader<BoOfficeAccExtract>  reader =new FlatFileItemReader<BoOfficeAccExtract>();
        Resource res=new FileSystemResource("C:\\Users\\satish_pahuja\\Desktop\\BO_Office_Acc_Ext.txt");
        reader.setResource(res);
        reader.setLineMapper(new DefaultLineMapper<BoOfficeAccExtract>(){{
            setLineTokenizer(new DelimitedLineTokenizer(){{
                setNames(new String[] {"extFileName","boId","officeAccountNo","solId" ,"bankId","ind","freeField1","freeField2","freeField3","modifiedBy","createdBy","modifiedDate","createdDate"});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<BoOfficeAccExtract>() {{
                setPrototypeBeanName("BoOfficeAccExtract");
        reader.open(new ExecutionContext());
        BoOfficeAccExtract boOfficAccExtract=reader.read();
        return boOfficAccExtract;
**BO_Office_Acc_Ext.txt**
BOOfficeAccExt,B0001,00006746464646,S0001,BA0001,A,ABC,XYZ,UID,SatishPahuja,SatishPahuja,090909,151512

Main class

package gov.in.dop.rsi.mgnregs.batch;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BatchProcessExtract {
    public static void main(String[] args) {
        System.setProperty("java.security.egd", "file:///dev/urandom");
        String[] springConfig  = 
            {   "com/mgnregs/res/database.xml", 
                "com/mgnregs/res/context.xml",
                "com/mgnregs/res/job-report.xml" 
        ApplicationContext context = 
                new ClassPathXmlApplicationContext(springConfig);
        JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
        Job job = (Job) context.getBean("batchExtracts");
        try {
            JobExecution execution = jobLauncher.run(job, new JobParameters());
            System.out.println("Exit Status : " + execution.getStatus());
        } catch (Exception e) {
            e.printStackTrace();
        System.out.println("Done");

I am getting this error and tried many things like removing space between values in txt file , adding double inverted commas with all the values. Please help me on this

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;
                There is no bean named BoOfficeAccExtract and your config / reader is borked... Why on earth are you wrapping a reder with a reader, reopening it on each call? Wy not just put it in the configuration?
– M. Deinum
                Sep 15, 2015 at 10:01
                I have to implement the code using spring batches which will read the information from txt file which will be having comma separated value and to write into the database. But I am getting the error while reading only.
– Satish Pahuja
                Sep 15, 2015 at 10:04
                No you don't... I strongly suggest a read of the Spring Batch documentation how it works and what it does. Your code is the problem, the code is written because you don't understand how the framework works. I really hope your processor and writer aren't the same because that will lead to issues.
– M. Deinum
                Sep 15, 2015 at 10:09

For starters drop that ugly reader you have, you are reading the same line over and over to each call to read(). Just use configuration not a reader wrapping a reader.

This is also because the BeanWrapperFieldSetMapper requires a BeanFactory (it implements BeanFactoryAware but due to your setup that never gets called.

Basically drop your reader and simply configure it in XML. Replace your cvsFileItemReader bean definition with the following (fix the packages as I haven't included those).

<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>

Or you could use Java based configuration instead of 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;
                What will be the solution if I want to use customReader class not the xml based configuration.
– Satish Pahuja
                Sep 15, 2015 at 10:14
                @Deinum Please find above updated Reader class and still not working. As in the future I have to read csv file from FTP server and how it would be possible if I will go to xml based configuration only.
– Satish Pahuja
                Sep 15, 2015 at 10:58
                Xml or java config doesn't matter. Your reader is flawed it won't work. If you want FTP, I would strongly suggest combining Spring Integration with Spring Batch (for either file polling on the local system or remote polling) which would make it completely transparant. Basically where the resource comes from doesn't matter.
– M. Deinum
                Sep 15, 2015 at 12:01
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.