3434import org .openapitools .codegen .java .assertions .JavaFileAssert ;
3535import org .openapitools .codegen .languages .AbstractJavaCodegen ;
3636import org .openapitools .codegen .languages .JavaClientCodegen ;
37+ import org .openapitools .codegen .languages .KotlinServerCodegen ;
3738import org .openapitools .codegen .languages .features .BeanValidationFeatures ;
3839import org .openapitools .codegen .languages .features .CXFServerFeatures ;
3940import org .openapitools .codegen .meta .features .SecurityFeature ;
5657import java .util .regex .Matcher ;
5758import java .util .regex .Pattern ;
5859import java .util .stream .Collectors ;
60+ import java .util .stream .Stream ;
5961
6062import static org .assertj .core .api .Assertions .assertThat ;
6163import static org .assertj .core .api .Assertions .entry ;
6264import static org .assertj .core .api .InstanceOfAssertFactories .FILE ;
63- import static org .openapitools .codegen .CodegenConstants .SERIALIZATION_LIBRARY ;
64- import static org .openapitools .codegen .TestUtils .newTempFolder ;
65- import static org .openapitools .codegen .TestUtils . validateJavaSourceFiles ;
65+ import static org .openapitools .codegen .CodegenConstants .* ;
66+ import static org .openapitools .codegen .TestUtils .* ;
67+ import static org .openapitools .codegen .languages . AbstractKotlinCodegen . USE_JAKARTA_EE ;
6668import static org .openapitools .codegen .languages .JavaClientCodegen .*;
69+ import static org .openapitools .codegen .languages .KotlinServerCodegen .Constants .INTERFACE_ONLY ;
70+ import static org .openapitools .codegen .languages .KotlinServerCodegen .Constants .JAXRS_SPEC ;
6771import static org .testng .Assert .*;
6872
6973public class JavaClientCodegenTest {
@@ -3592,4 +3596,27 @@ public void testClassesAreValidJavaOkHttpGson() {
35923596 "public some.pkg.B getsomepkgB() throws ClassCastException {"
35933597 );
35943598 }
3599+
3600+ @ Test (description = "Issue #20139" )
3601+ public void givenAdditionalPropertiesNotDefinedAndIsDisallowAdditionalPropertiesIfNotPresentIsFalseWhenGenerateModelThenAdditionalPropertiesTypeIsObject () throws Exception {
3602+ File output = Files .createTempDirectory ("test" ).toFile ().getCanonicalFile ();
3603+ output .deleteOnExit ();
3604+
3605+ JavaClientCodegen codegen = new JavaClientCodegen ();
3606+ codegen .setOutputDir (output .getAbsolutePath ());
3607+ codegen .setUseBeanValidation (true );
3608+ codegen .additionalProperties ().put (DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT , false );
3609+ // The default, okhttp-gson, relies on isAdditionalPropertiesTrue and doesn't use additionalPropertiesType
3610+ codegen .additionalProperties ().put (LIBRARY , JERSEY2 );
3611+ new DefaultGenerator ().opts (new ClientOptInput ()
3612+ .openAPI (TestUtils .parseSpec ("src/test/resources/2_0/issue_20139.yaml" ))
3613+ .config (codegen ))
3614+ .generate ();
3615+
3616+ String outputPath = output .getAbsolutePath () + "/src/main/java/org/openapitools/client" ;
3617+ Path jsonWebKey = Paths .get (outputPath + "/model/JsonWebKey.java" );
3618+ JavaFileAssert .assertThat (jsonWebKey )
3619+ .assertProperty ("additionalProperties" )
3620+ .withType ("Map<String, Object>" );
3621+ }
35953622}
0 commit comments