Skip to content

Commit 9e9bff4

Browse files
committed
fix(kotlin-spring): add explicit Jackson 3 dependency versions for Spring Boot 4
Spring Boot 4's BOM does not manage tools.jackson.* artifacts, so Jackson 3 dataformat and module dependencies need explicit versions. Also fixes the hardcoded YAMLMapper import in homeController.mustache to use the jacksonPackage template variable. Note: Jackson annotations stay in com.fasterxml.jackson.annotation even for Jackson 3 — only core, databind, dataformat and module jars moved to the tools.jackson group.
1 parent 41d25c0 commit 9e9bff4

10 files changed

Lines changed: 123 additions & 22 deletions

File tree

modules/openapi-generator/src/main/resources/kotlin-spring/homeController.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import org.springframework.context.annotation.Bean
44
import org.springframework.stereotype.Controller
55
import org.springframework.web.bind.annotation.RequestMapping
66
{{#sourceDocumentationProvider}}
7-
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper
7+
import {{jacksonPackage}}.dataformat.yaml.YAMLMapper
88
import org.springframework.beans.factory.annotation.Value
99
import org.springframework.core.io.Resource
1010
import org.springframework.util.StreamUtils

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-boot/buildGradle-sb4-Kts.mustache

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ dependencies {
4646

4747
implementation("com.google.code.findbugs:jsr305:3.0.2")
4848
{{#useJackson3}}
49-
implementation("tools.jackson.dataformat:jackson-dataformat-yaml")
50-
implementation("tools.jackson.dataformat:jackson-dataformat-xml")
51-
implementation("tools.jackson.module:jackson-module-kotlin")
49+
val jackson3Version = "3.1.0"
50+
implementation("tools.jackson.dataformat:jackson-dataformat-yaml:$jackson3Version")
51+
implementation("tools.jackson.dataformat:jackson-dataformat-xml:$jackson3Version")
52+
implementation("tools.jackson.module:jackson-module-kotlin:$jackson3Version")
5253
{{/useJackson3}}
5354
{{^useJackson3}}
5455
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml")

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-boot/pom-sb4.mustache

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
<swagger-ui.version>5.17.14</swagger-ui.version>{{/springDocDocumentationProvider}}{{/useSwaggerUI}}{{^springDocDocumentationProvider}}{{#swagger1AnnotationLibrary}}
1212
<swagger-annotations.version>1.6.6</swagger-annotations.version>{{/swagger1AnnotationLibrary}}{{#swagger2AnnotationLibrary}}
1313
<swagger-annotations.version>2.2.28</swagger-annotations.version>{{/swagger2AnnotationLibrary}}{{/springDocDocumentationProvider}}
14-
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
14+
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>{{#useJackson3}}
15+
<jackson3.version>3.1.0</jackson3.version>{{/useJackson3}}
1516
<jakarta-annotation.version>3.0.0</jakarta-annotation.version>
1617
<kotlin-test-junit5.version>2.2.0</kotlin-test-junit5.version>
1718

@@ -158,22 +159,40 @@
158159
<artifactId>jsr305</artifactId>
159160
<version>${findbugs-jsr305.version}</version>
160161
</dependency>
162+
{{#useJackson3}}
161163
<dependency>
162164
<groupId>{{jacksonPackage}}.dataformat</groupId>
163165
<artifactId>jackson-dataformat-yaml</artifactId>
166+
<version>${jackson3.version}</version>
164167
</dependency>
165168
<dependency>
166169
<groupId>{{jacksonPackage}}.dataformat</groupId>
167170
<artifactId>jackson-dataformat-xml</artifactId>
168-
</dependency>{{^useJackson3}}
171+
<version>${jackson3.version}</version>
172+
</dependency>
173+
<dependency>
174+
<groupId>{{jacksonPackage}}.module</groupId>
175+
<artifactId>jackson-module-kotlin</artifactId>
176+
<version>${jackson3.version}</version>
177+
</dependency>
178+
{{/useJackson3}}{{^useJackson3}}
179+
<dependency>
180+
<groupId>{{jacksonPackage}}.dataformat</groupId>
181+
<artifactId>jackson-dataformat-yaml</artifactId>
182+
</dependency>
183+
<dependency>
184+
<groupId>{{jacksonPackage}}.dataformat</groupId>
185+
<artifactId>jackson-dataformat-xml</artifactId>
186+
</dependency>
169187
<dependency>
170188
<groupId>com.fasterxml.jackson.datatype</groupId>
171189
<artifactId>jackson-datatype-jsr310</artifactId>
172-
</dependency>{{/useJackson3}}
190+
</dependency>
173191
<dependency>
174192
<groupId>{{jacksonPackage}}.module</groupId>
175193
<artifactId>jackson-module-kotlin</artifactId>
176194
</dependency>
195+
{{/useJackson3}}
177196
{{#useBeanValidation}}
178197
<!-- Bean Validation API support -->
179198
<dependency>

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-cloud/buildGradle-sb4-Kts.mustache

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ dependencies {
5454

5555
implementation("com.google.code.findbugs:jsr305:3.0.2")
5656
{{#useJackson3}}
57-
implementation("tools.jackson.dataformat:jackson-dataformat-yaml")
58-
implementation("tools.jackson.dataformat:jackson-dataformat-xml")
59-
implementation("tools.jackson.module:jackson-module-kotlin")
57+
val jackson3Version = "3.1.0"
58+
implementation("tools.jackson.dataformat:jackson-dataformat-yaml:$jackson3Version")
59+
implementation("tools.jackson.dataformat:jackson-dataformat-xml:$jackson3Version")
60+
implementation("tools.jackson.module:jackson-module-kotlin:$jackson3Version")
6061
{{/useJackson3}}
6162
{{^useJackson3}}
6263
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml")

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-cloud/pom-sb4.mustache

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
</swagger-annotations.version>{{/swagger1AnnotationLibrary}}{{#swagger2AnnotationLibrary}}
1818
<swagger-annotations.version>2.2.28
1919
</swagger-annotations.version>{{/swagger2AnnotationLibrary}}{{/springDocDocumentationProvider}}
20-
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
20+
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>{{#useJackson3}}
21+
<jackson3.version>3.1.0</jackson3.version>{{/useJackson3}}
2122
<jakarta-annotation.version>3.0.0</jakarta-annotation.version>
2223
<kotlin-test-junit5.version>2.2.0</kotlin-test-junit5.version>
2324

@@ -183,22 +184,40 @@
183184
<artifactId>spring-boot-starter-oauth2-client</artifactId>
184185
</dependency>
185186
{{/hasAuthMethods}}
187+
{{#useJackson3}}
186188
<dependency>
187189
<groupId>{{jacksonPackage}}.dataformat</groupId>
188190
<artifactId>jackson-dataformat-yaml</artifactId>
191+
<version>${jackson3.version}</version>
189192
</dependency>
190193
<dependency>
191194
<groupId>{{jacksonPackage}}.dataformat</groupId>
192195
<artifactId>jackson-dataformat-xml</artifactId>
193-
</dependency>{{^useJackson3}}
196+
<version>${jackson3.version}</version>
197+
</dependency>
198+
<dependency>
199+
<groupId>{{jacksonPackage}}.module</groupId>
200+
<artifactId>jackson-module-kotlin</artifactId>
201+
<version>${jackson3.version}</version>
202+
</dependency>
203+
{{/useJackson3}}{{^useJackson3}}
204+
<dependency>
205+
<groupId>{{jacksonPackage}}.dataformat</groupId>
206+
<artifactId>jackson-dataformat-yaml</artifactId>
207+
</dependency>
208+
<dependency>
209+
<groupId>{{jacksonPackage}}.dataformat</groupId>
210+
<artifactId>jackson-dataformat-xml</artifactId>
211+
</dependency>
194212
<dependency>
195213
<groupId>com.fasterxml.jackson.datatype</groupId>
196214
<artifactId>jackson-datatype-jsr310</artifactId>
197-
</dependency>{{/useJackson3}}
215+
</dependency>
198216
<dependency>
199217
<groupId>{{jacksonPackage}}.module</groupId>
200218
<artifactId>jackson-module-kotlin</artifactId>
201219
</dependency>
220+
{{/useJackson3}}
202221
{{#useBeanValidation}}
203222
<!-- Bean Validation API support -->
204223
<dependency>

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-declarative-http-interface/buildGradle-sb4-Kts.mustache

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ dependencies {
5454

5555
implementation("com.google.code.findbugs:jsr305:3.0.2")
5656
{{#useJackson3}}
57-
implementation("tools.jackson.dataformat:jackson-dataformat-yaml")
58-
implementation("tools.jackson.dataformat:jackson-dataformat-xml")
59-
implementation("tools.jackson.module:jackson-module-kotlin")
57+
val jackson3Version = "3.1.0"
58+
implementation("tools.jackson.dataformat:jackson-dataformat-yaml:$jackson3Version")
59+
implementation("tools.jackson.dataformat:jackson-dataformat-xml:$jackson3Version")
60+
implementation("tools.jackson.module:jackson-module-kotlin:$jackson3Version")
6061
{{/useJackson3}}
6162
{{^useJackson3}}
6263
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml")

modules/openapi-generator/src/main/resources/kotlin-spring/libraries/spring-declarative-http-interface/pom-sb4.mustache

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
</swagger-annotations.version>{{/swagger1AnnotationLibrary}}{{#swagger2AnnotationLibrary}}
1818
<swagger-annotations.version>2.2.28
1919
</swagger-annotations.version>{{/swagger2AnnotationLibrary}}{{/springDocDocumentationProvider}}
20-
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
20+
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>{{#useJackson3}}
21+
<jackson3.version>3.1.0</jackson3.version>{{/useJackson3}}
2122
<jakarta-annotation.version>3.0.0</jakarta-annotation.version>
2223
<kotlin-test-junit5.version>2.2.0</kotlin-test-junit5.version>
2324

@@ -179,22 +180,40 @@
179180
<artifactId>spring-boot-starter-oauth2-client</artifactId>
180181
</dependency>
181182
{{/hasAuthMethods}}
183+
{{#useJackson3}}
182184
<dependency>
183185
<groupId>{{jacksonPackage}}.dataformat</groupId>
184186
<artifactId>jackson-dataformat-yaml</artifactId>
187+
<version>${jackson3.version}</version>
185188
</dependency>
186189
<dependency>
187190
<groupId>{{jacksonPackage}}.dataformat</groupId>
188191
<artifactId>jackson-dataformat-xml</artifactId>
189-
</dependency>{{^useJackson3}}
192+
<version>${jackson3.version}</version>
193+
</dependency>
194+
<dependency>
195+
<groupId>{{jacksonPackage}}.module</groupId>
196+
<artifactId>jackson-module-kotlin</artifactId>
197+
<version>${jackson3.version}</version>
198+
</dependency>
199+
{{/useJackson3}}{{^useJackson3}}
200+
<dependency>
201+
<groupId>{{jacksonPackage}}.dataformat</groupId>
202+
<artifactId>jackson-dataformat-yaml</artifactId>
203+
</dependency>
204+
<dependency>
205+
<groupId>{{jacksonPackage}}.dataformat</groupId>
206+
<artifactId>jackson-dataformat-xml</artifactId>
207+
</dependency>
190208
<dependency>
191209
<groupId>com.fasterxml.jackson.datatype</groupId>
192210
<artifactId>jackson-datatype-jsr310</artifactId>
193-
</dependency>{{/useJackson3}}
211+
</dependency>
194212
<dependency>
195213
<groupId>{{jacksonPackage}}.module</groupId>
196214
<artifactId>jackson-module-kotlin</artifactId>
197215
</dependency>
216+
{{/useJackson3}}
198217
{{#useBeanValidation}}
199218
<!-- Bean Validation API support -->
200219
<dependency>

modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/spring/KotlinSpringServerCodegenTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4825,6 +4825,42 @@ public void shouldGenerateSpringBoot4PomWithJackson3Deps() throws IOException {
48254825
assertFileNotContains(pomPath, "com.fasterxml.jackson.module");
48264826
}
48274827

4828+
@Test
4829+
public void shouldGenerateJackson3BuildDepsWithVersions() throws IOException {
4830+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
4831+
output.deleteOnExit();
4832+
String outputPath = output.getAbsolutePath().replace('\\', '/');
4833+
4834+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/petstore.yaml");
4835+
final KotlinSpringServerCodegen codegen = new KotlinSpringServerCodegen();
4836+
codegen.setOpenAPI(openAPI);
4837+
codegen.setOutputDir(output.getAbsolutePath());
4838+
4839+
codegen.additionalProperties().put(KotlinSpringServerCodegen.USE_SPRING_BOOT4, "true");
4840+
codegen.additionalProperties().put(AbstractKotlinCodegen.USE_JACKSON_3, "true");
4841+
codegen.additionalProperties().put(DOCUMENTATION_PROVIDER, DocumentationProvider.NONE.toCliOptValue());
4842+
codegen.additionalProperties().put(ANNOTATION_LIBRARY, AnnotationLibrary.NONE.toCliOptValue());
4843+
4844+
ClientOptInput input = new ClientOptInput();
4845+
input.openAPI(openAPI);
4846+
input.config(codegen);
4847+
4848+
DefaultGenerator generator = new DefaultGenerator();
4849+
generator.setGenerateMetadata(false);
4850+
generator.opts(input).generate();
4851+
4852+
// Gradle build file must have Jackson 3 deps with explicit versions
4853+
Path gradlePath = Paths.get(outputPath + "/build.gradle.kts");
4854+
assertFileContains(gradlePath, "tools.jackson.dataformat:jackson-dataformat-yaml:");
4855+
assertFileContains(gradlePath, "tools.jackson.module:jackson-module-kotlin:");
4856+
// Should NOT include non-existent tools.jackson.core:jackson-annotations
4857+
assertFileNotContains(gradlePath, "tools.jackson.core:jackson-annotations");
4858+
4859+
// Annotations stay in com.fasterxml.jackson.annotation even with Jackson 3
4860+
Path petModelPath = Paths.get(outputPath + "/src/main/kotlin/org/openapitools/model/Pet.kt");
4861+
assertFileContains(petModelPath, "com.fasterxml.jackson.annotation.JsonProperty");
4862+
}
4863+
48284864
@Test
48294865
public void shouldDefaultToJackson3WhenSpringBoot4Enabled() throws IOException {
48304866
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();

samples/server/petstore/kotlin-springboot-4/build.gradle.kts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ dependencies {
2929
implementation("org.springframework.boot:spring-boot-starter-webmvc")
3030

3131
implementation("com.google.code.findbugs:jsr305:3.0.2")
32-
implementation("tools.jackson.dataformat:jackson-dataformat-yaml")
33-
implementation("tools.jackson.dataformat:jackson-dataformat-xml")
34-
implementation("tools.jackson.module:jackson-module-kotlin")
32+
val jackson3Version = "3.1.0"
33+
implementation("tools.jackson.dataformat:jackson-dataformat-yaml:$jackson3Version")
34+
implementation("tools.jackson.dataformat:jackson-dataformat-xml:$jackson3Version")
35+
implementation("tools.jackson.module:jackson-module-kotlin:$jackson3Version")
3536
implementation("org.springframework.data:spring-data-commons")
3637
implementation("jakarta.validation:jakarta.validation-api")
3738
implementation("jakarta.annotation:jakarta.annotation-api:3.0.0")

samples/server/petstore/kotlin-springboot-4/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<version>1.0.0</version>
88
<properties>
99
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
10+
<jackson3.version>3.1.0</jackson3.version>
1011
<jakarta-annotation.version>3.0.0</jakarta-annotation.version>
1112
<kotlin-test-junit5.version>2.2.0</kotlin-test-junit5.version>
1213

@@ -101,14 +102,17 @@
101102
<dependency>
102103
<groupId>tools.jackson.dataformat</groupId>
103104
<artifactId>jackson-dataformat-yaml</artifactId>
105+
<version>${jackson3.version}</version>
104106
</dependency>
105107
<dependency>
106108
<groupId>tools.jackson.dataformat</groupId>
107109
<artifactId>jackson-dataformat-xml</artifactId>
110+
<version>${jackson3.version}</version>
108111
</dependency>
109112
<dependency>
110113
<groupId>tools.jackson.module</groupId>
111114
<artifactId>jackson-module-kotlin</artifactId>
115+
<version>${jackson3.version}</version>
112116
</dependency>
113117
<!-- Bean Validation API support -->
114118
<dependency>

0 commit comments

Comments
 (0)