Skip to content

Commit 8c1f3ba

Browse files
author
adrianpusty
committed
UnsupportedOperationException reproduction for StreamingXlsxItemReader used with BeanWrapperRowMapper
1 parent 9c02e11 commit 8c1f3ba

File tree

3 files changed

+142
-0
lines changed

3 files changed

+142
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>org.example</groupId>
8+
<artifactId>spring-batch-excel-row-by-index-issue-reproduce</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
11+
<parent>
12+
<groupId>org.springframework.boot</groupId>
13+
<artifactId>spring-boot-starter-parent</artifactId>
14+
<version>3.1.2</version>
15+
<relativePath/> <!-- lookup parent from repository -->
16+
</parent>
17+
18+
<properties>
19+
<maven.compiler.source>11</maven.compiler.source>
20+
<maven.compiler.target>11</maven.compiler.target>
21+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22+
</properties>
23+
24+
<dependencies>
25+
<dependency>
26+
<groupId>org.apache.logging.log4j</groupId>
27+
<artifactId>log4j-to-slf4j</artifactId>
28+
<version>2.20.0</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.springframework.boot</groupId>
32+
<artifactId>spring-boot-starter</artifactId>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.projectlombok</groupId>
36+
<artifactId>lombok</artifactId>
37+
<version>1.18.26</version>
38+
<scope>compile</scope>
39+
</dependency>
40+
41+
<dependency>
42+
<groupId>org.springframework.batch</groupId>
43+
<artifactId>spring-batch-core</artifactId>
44+
<version>4.3.8</version>
45+
</dependency>
46+
<dependency>
47+
<groupId>org.springframework.boot</groupId>
48+
<artifactId>spring-boot-autoconfigure</artifactId>
49+
<version>3.1.2</version>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.springframework.batch.extensions</groupId>
53+
<artifactId>spring-batch-excel</artifactId>
54+
<version>0.1.1</version>
55+
</dependency>
56+
<dependency>
57+
<groupId>org.apache.poi</groupId>
58+
<artifactId>poi-ooxml</artifactId>
59+
<version>5.2.3</version>
60+
</dependency>
61+
</dependencies>
62+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package org.example;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.batch.core.*;
5+
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
6+
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
7+
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
8+
import org.springframework.batch.core.launch.JobLauncher;
9+
import org.springframework.batch.core.launch.support.RunIdIncrementer;
10+
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
11+
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
12+
import org.springframework.batch.core.repository.JobRestartException;
13+
import org.springframework.batch.extensions.excel.mapping.BeanWrapperRowMapper;
14+
import org.springframework.batch.extensions.excel.streaming.StreamingXlsxItemReader;
15+
import org.springframework.boot.SpringApplication;
16+
import org.springframework.boot.autoconfigure.SpringBootApplication;
17+
import org.springframework.context.annotation.Bean;
18+
import org.springframework.context.annotation.Configuration;
19+
import org.springframework.core.io.FileSystemResource;
20+
21+
import java.net.URL;
22+
import java.util.Objects;
23+
24+
@Configuration
25+
@SpringBootApplication
26+
@EnableBatchProcessing
27+
@RequiredArgsConstructor
28+
public class RowByIndexNotSupportedReprod
29+
{
30+
private final JobBuilderFactory jobBuilderFactory;
31+
private final StepBuilderFactory stepBuilderFactory;
32+
private final JobLauncher jobLauncher;
33+
public static void main(String[] args)
34+
{
35+
SpringApplication.run(RowByIndexNotSupportedReprod.class, args);
36+
}
37+
38+
@Bean
39+
public JobExecution createJob() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException
40+
{
41+
Job job = jobBuilderFactory.get("a_job")
42+
.incrementer(new RunIdIncrementer())
43+
.flow(createStep())
44+
.end().build();
45+
return jobLauncher.run(job, new JobParameters());
46+
}
47+
48+
public Step createStep()
49+
{
50+
BeanWrapperRowMapper<MyIn> mapper = new BeanWrapperRowMapper<>();
51+
mapper.setTargetType(MyIn.class);
52+
StreamingXlsxItemReader<MyIn> reader = new StreamingXlsxItemReader<>();
53+
54+
FileSystemResource resource = resource("input.xlsx");
55+
56+
reader.setResource(resource);
57+
reader.setRowMapper(mapper);
58+
reader.setLinesToSkip(1);
59+
60+
return stepBuilderFactory.get("a_step")
61+
.<MyIn, MyOut>chunk(10)
62+
.reader(reader)
63+
.writer(System.out::println)
64+
.build();
65+
}
66+
67+
private static FileSystemResource resource(String name)
68+
{
69+
URL url = RowByIndexNotSupportedReprod.class
70+
.getClassLoader()
71+
.getResource(name);
72+
73+
String file = Objects.requireNonNull(url).getFile();
74+
75+
return new FileSystemResource(file);
76+
}
77+
}
78+
79+
class MyIn {}
80+
class MyOut {}
Binary file not shown.

0 commit comments

Comments
 (0)