Restricted Java oneOf imports to Jackson only when needed (#21404) (#21405)

* Fixed issue #21404 - Restricted Java oneOf imports to Jackson when needed

* Fix TODOs
This commit is contained in:
DavidGrath 2025-06-26 10:12:37 +01:00 committed by GitHub
parent cfe476f32d
commit b05604dab7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 10 deletions

View File

@ -1230,11 +1230,13 @@ public class JavaClientCodegen extends AbstractJavaCodegen
@Override
public void addImportsToOneOfInterface(List<Map<String, String>> imports) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
if(additionalProperties.containsKey(SERIALIZATION_LIBRARY_JACKSON)) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
}
}
}
}

View File

@ -479,11 +479,13 @@ public class JavaHelidonClientCodegen extends JavaHelidonCommonCodegen {
@Override
public void addImportsToOneOfInterface(List<Map<String, String>> imports) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
if(additionalProperties.containsKey(SERIALIZATION_LIBRARY_JACKSON)) {
for (String i : Arrays.asList("JsonSubTypes", "JsonTypeInfo", "JsonIgnoreProperties")) {
Map<String, String> oneImport = new HashMap<>();
oneImport.put("import", importMapping.get(i));
if (!imports.contains(oneImport)) {
imports.add(oneImport);
}
}
}
}

View File

@ -3699,4 +3699,29 @@ public class JavaClientCodegenTest {
TestUtils.assertFileNotContains(output.resolve("src/main/java/xyz/abcdef/api/PetApi.java"),
"public record DeletePetRequest(Long petId, String apiKey){}");
}
@Test(dataProvider = "librariesNotSupportingJackson")
public void givenOneOfUsesInterfacesAndLibraryNotJacksonWhenGenerateThenOneOfInterfaceDoesNotHaveJacksonImports(Library library) throws Exception {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
Map<String, Object> properties = new HashMap<>();
properties.put(USE_ONE_OF_INTERFACES, true);
Generator generator = new DefaultGenerator();
CodegenConfigurator configurator = new CodegenConfigurator()
.setInputSpec("src/test/resources/3_0/oneOf.yaml")
.setGeneratorName("java")
.setLibrary(library.value)
.setAdditionalProperties(properties)
.setOutputDir(output.getAbsolutePath());
ClientOptInput clientOptInput = configurator.toClientOptInput();
generator.opts(clientOptInput)
.generate();
String outputPath = output.getAbsolutePath() + "/src/main/java/org/openapitools";
File testModel = new File(outputPath, "/client/model/Fruit.java");
String fileContent = Files.readString(testModel.toPath());
TestUtils.assertValidJavaSourceCode(fileContent);
TestUtils.assertFileNotContains(testModel.toPath(), "com.fasterxml.jackson");
}
}