Using Spring Batch I am trying to get every line of an input file as a String giving it to the ItemProcessor without any "CSV parsing" in the ItemReader.
I came out with a configuration Java class (using @Configuration and @EnableBatchProcessing) containing the following reader() method which is making the next ItemProcessor to throw a ClassCastException though.
This ItemReader should read an input file and pass to the ItemProcessor every line of the input file as a String.
@Bean
public ItemReader<String> reader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data-to-process.txt"));
reader.setLineMapper(new DefaultLineMapper() {{
setLineTokenizer(new DelimitedLineTokenizer());
setFieldSetMapper(new PassThroughFieldSetMapper());
}});
return reader;
}
When running the previous code I am getting an exception in the ItemProcessor which is expecting a String from the reader():
java.lang.ClassCastException: org.springframework.batch.item.file.transform.DefaultFieldSet cannot be cast to java.lang.String
The custom ItemProcessor I wrote is defined as:
public class MyOwnCustomItemProcessor implements ItemProcessor<String, MyOwnCustomBusinessBean> {
I believe I should use this PassThroughFieldSetMapper in the ItemReader and I would not like to use any kind of tokenizer. According to the documentation I think I must use it and I can not avoid it, but I am keeping getting exceptions thrown.
How can I "transfer" every input line directly as a String to an ItemProcessor e.g. ?
Use PassThroughLineMapper if available else
public class PassThroughLineMapper implements LineMapper<String> {
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With