From b23dcbd1904bc8681341118904c6af8b8620fcf5 Mon Sep 17 00:00:00 2001 From: Rohit Sanjay Date: Mon, 13 May 2024 01:52:18 -0700 Subject: [PATCH] [Java] [VertX] Handle hyphen-separated security scheme in input spec (#18630) --- .../Java/libraries/vertx/ApiClient.mustache | 24 +++++++------- .../codegen/java/JavaClientCodegenTest.java | 33 +++++++++++++++++++ ...with-hyphen-separated-security-scheme.yaml | 21 ++++++++++++ .../org/openapitools/client/ApiClient.java | 24 +++++++------- .../org/openapitools/client/ApiClient.java | 30 ++++++++--------- 5 files changed, 93 insertions(+), 39 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/ping-with-hyphen-separated-security-scheme.yaml diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache index c745392012f4..e54c30d3e0e6 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache @@ -680,54 +680,54 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { private final Map authentications = new LinkedHashMap<>();{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} - public void add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String username, String password) { + public void add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String username, String password) { HttpBasicAuth auth = new HttpBasicAuth(); auth.setUsername(username); auth.setPassword(password); authentications.put("{{name}}", auth); }{{/isBasicBasic}}{{#isBasicBearer}} - public void add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String bearerToken) { + public void add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String bearerToken) { HttpBearerAuth auth = new HttpBearerAuth("{{scheme}}"); auth.setBearerToken(bearerToken); authentications.put("{{name}}", auth); }{{/isBasicBearer}}{{/isBasic}}{{#isApiKey}} - public void add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String apikey, String apiKeyPrefix) { + public void add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String apikey, String apiKeyPrefix) { ApiKeyAuth auth = new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{#isKeyInQuery}}"query"{{/isKeyInQuery}}{{#isKeyInCookie}}"cookie"{{/isKeyInCookie}},"{{keyParamName}}"); auth.setApiKey(apikey); auth.setApiKeyPrefix(apiKeyPrefix); authentications.put("{{name}}", auth); }{{/isApiKey}}{{#isOAuth}} - public void add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String accessToken) { + public void add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String accessToken) { OAuth auth = new OAuth(); auth.setAccessToken(accessToken); authentications.put("{{name}}", auth); }{{/isOAuth}}{{/authMethods}}{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} - public static AuthInfo for{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}(String username, String password) { + public static AuthInfo for{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}(String username, String password) { AuthInfo authInfo = new AuthInfo(); - authInfo.add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(username, password); + authInfo.add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(username, password); return authInfo; }{{/isBasicBasic}}{{#isBasicBearer}} - public static AuthInfo for{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String bearerToken) { + public static AuthInfo for{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String bearerToken) { AuthInfo authInfo = new AuthInfo(); - authInfo.add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(bearerToken); + authInfo.add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(bearerToken); return authInfo; }{{/isBasicBearer}}{{/isBasic}}{{#isApiKey}} - public static AuthInfo for{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String apikey, String apiKeyPrefix) { + public static AuthInfo for{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String apikey, String apiKeyPrefix) { AuthInfo authInfo = new AuthInfo(); - authInfo.add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(apikey, apiKeyPrefix); + authInfo.add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(apikey, apiKeyPrefix); return authInfo; }{{/isApiKey}}{{#isOAuth}} - public static AuthInfo for{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(String accessToken) { + public static AuthInfo for{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(String accessToken) { AuthInfo authInfo = new AuthInfo(); - authInfo.add{{#lambda.titlecase}}{{name}}{{/lambda.titlecase}}Authentication(accessToken); + authInfo.add{{#lambda.titlecase}}{{#lambda.camelcase}}{{name}}{{/lambda.camelcase}}{{/lambda.titlecase}}Authentication(accessToken); return authInfo; }{{/isOAuth}}{{/authMethods}} } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index de42f49f0ba8..a4b1a0d0b78e 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -999,6 +999,39 @@ public void testBearerAuth() { Assertions.assertEquals(security.get(0).isBasicBearer, Boolean.TRUE); } + @Test + public void testVertXAuthInfoWithHyphenSeparatedSecurityScheme() throws Exception { + Map properties = new HashMap<>(); + properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api"); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setLibrary(JavaClientCodegen.VERTX) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/ping-with-hyphen-separated-security-scheme.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(clientOptInput).generate(); + + // Test that hyphen-separated security scheme names does not + // break the Java VertX client code generation + validateJavaSourceFiles(files); + + // Test that the name was correctly transformed to camelCase + // starting with an uppercase letter + TestUtils.assertFileContains( + Paths.get(output + "/src/main/java/xyz/abcdef/ApiClient.java"), + "public static class AuthInfo {", + "public void addHyphenatedNameTestAuthentication(String bearerToken) {", + "public static AuthInfo forHyphenatedNameTestAuthentication(String bearerToken) {" + ); + } + private CodegenProperty codegenPropertyWithArrayOfIntegerValues() { CodegenProperty array = new CodegenProperty(); final CodegenProperty items = new CodegenProperty(); diff --git a/modules/openapi-generator/src/test/resources/3_0/ping-with-hyphen-separated-security-scheme.yaml b/modules/openapi-generator/src/test/resources/3_0/ping-with-hyphen-separated-security-scheme.yaml new file mode 100644 index 000000000000..e2fcc9f41cd3 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/ping-with-hyphen-separated-security-scheme.yaml @@ -0,0 +1,21 @@ +openapi: 3.0.1 +info: + title: ping test + version: '1.0' +servers: + - url: 'http://localhost:8080/' +paths: + /ping: + get: + operationId: pingGet + responses: + '201': + description: OK +components: + securitySchemes: + hyphenated-name-test: + scheme: bearer + bearerFormat: token + type: http +security: + - hyphenated-name-test: [] diff --git a/samples/client/petstore/java/vertx-no-nullable/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/vertx-no-nullable/src/main/java/org/openapitools/client/ApiClient.java index 46be7b249c32..286f017ab6d3 100644 --- a/samples/client/petstore/java/vertx-no-nullable/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/vertx-no-nullable/src/main/java/org/openapitools/client/ApiClient.java @@ -667,54 +667,54 @@ public static class AuthInfo { private final Map authentications = new LinkedHashMap<>(); - public void addPetstore_authAuthentication(String accessToken) { + public void addPetstoreAuthAuthentication(String accessToken) { OAuth auth = new OAuth(); auth.setAccessToken(accessToken); authentications.put("petstore_auth", auth); } - public void addApi_keyAuthentication(String apikey, String apiKeyPrefix) { + public void addApiKeyAuthentication(String apikey, String apiKeyPrefix) { ApiKeyAuth auth = new ApiKeyAuth("header","api_key"); auth.setApiKey(apikey); auth.setApiKeyPrefix(apiKeyPrefix); authentications.put("api_key", auth); } - public void addApi_key_queryAuthentication(String apikey, String apiKeyPrefix) { + public void addApiKeyQueryAuthentication(String apikey, String apiKeyPrefix) { ApiKeyAuth auth = new ApiKeyAuth("query","api_key_query"); auth.setApiKey(apikey); auth.setApiKeyPrefix(apiKeyPrefix); authentications.put("api_key_query", auth); } - public void addHttp_basic_testAuthentication(String username, String password) { + public void addHttpBasicTestAuthentication(String username, String password) { HttpBasicAuth auth = new HttpBasicAuth(); auth.setUsername(username); auth.setPassword(password); authentications.put("http_basic_test", auth); } - public static AuthInfo forPetstore_authAuthentication(String accessToken) { + public static AuthInfo forPetstoreAuthAuthentication(String accessToken) { AuthInfo authInfo = new AuthInfo(); - authInfo.addPetstore_authAuthentication(accessToken); + authInfo.addPetstoreAuthAuthentication(accessToken); return authInfo; } - public static AuthInfo forApi_keyAuthentication(String apikey, String apiKeyPrefix) { + public static AuthInfo forApiKeyAuthentication(String apikey, String apiKeyPrefix) { AuthInfo authInfo = new AuthInfo(); - authInfo.addApi_keyAuthentication(apikey, apiKeyPrefix); + authInfo.addApiKeyAuthentication(apikey, apiKeyPrefix); return authInfo; } - public static AuthInfo forApi_key_queryAuthentication(String apikey, String apiKeyPrefix) { + public static AuthInfo forApiKeyQueryAuthentication(String apikey, String apiKeyPrefix) { AuthInfo authInfo = new AuthInfo(); - authInfo.addApi_key_queryAuthentication(apikey, apiKeyPrefix); + authInfo.addApiKeyQueryAuthentication(apikey, apiKeyPrefix); return authInfo; } - public static AuthInfo forHttp_basic_test(String username, String password) { + public static AuthInfo forHttpBasicTest(String username, String password) { AuthInfo authInfo = new AuthInfo(); - authInfo.addHttp_basic_testAuthentication(username, password); + authInfo.addHttpBasicTestAuthentication(username, password); return authInfo; } } diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/ApiClient.java index df4887cfbdec..1251d5fc9100 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/ApiClient.java @@ -671,67 +671,67 @@ public static class AuthInfo { private final Map authentications = new LinkedHashMap<>(); - public void addPetstore_authAuthentication(String accessToken) { + public void addPetstoreAuthAuthentication(String accessToken) { OAuth auth = new OAuth(); auth.setAccessToken(accessToken); authentications.put("petstore_auth", auth); } - public void addApi_keyAuthentication(String apikey, String apiKeyPrefix) { + public void addApiKeyAuthentication(String apikey, String apiKeyPrefix) { ApiKeyAuth auth = new ApiKeyAuth("header","api_key"); auth.setApiKey(apikey); auth.setApiKeyPrefix(apiKeyPrefix); authentications.put("api_key", auth); } - public void addApi_key_queryAuthentication(String apikey, String apiKeyPrefix) { + public void addApiKeyQueryAuthentication(String apikey, String apiKeyPrefix) { ApiKeyAuth auth = new ApiKeyAuth("query","api_key_query"); auth.setApiKey(apikey); auth.setApiKeyPrefix(apiKeyPrefix); authentications.put("api_key_query", auth); } - public void addHttp_basic_testAuthentication(String username, String password) { + public void addHttpBasicTestAuthentication(String username, String password) { HttpBasicAuth auth = new HttpBasicAuth(); auth.setUsername(username); auth.setPassword(password); authentications.put("http_basic_test", auth); } - public void addBearer_testAuthentication(String bearerToken) { + public void addBearerTestAuthentication(String bearerToken) { HttpBearerAuth auth = new HttpBearerAuth("bearer"); auth.setBearerToken(bearerToken); authentications.put("bearer_test", auth); } - public static AuthInfo forPetstore_authAuthentication(String accessToken) { + public static AuthInfo forPetstoreAuthAuthentication(String accessToken) { AuthInfo authInfo = new AuthInfo(); - authInfo.addPetstore_authAuthentication(accessToken); + authInfo.addPetstoreAuthAuthentication(accessToken); return authInfo; } - public static AuthInfo forApi_keyAuthentication(String apikey, String apiKeyPrefix) { + public static AuthInfo forApiKeyAuthentication(String apikey, String apiKeyPrefix) { AuthInfo authInfo = new AuthInfo(); - authInfo.addApi_keyAuthentication(apikey, apiKeyPrefix); + authInfo.addApiKeyAuthentication(apikey, apiKeyPrefix); return authInfo; } - public static AuthInfo forApi_key_queryAuthentication(String apikey, String apiKeyPrefix) { + public static AuthInfo forApiKeyQueryAuthentication(String apikey, String apiKeyPrefix) { AuthInfo authInfo = new AuthInfo(); - authInfo.addApi_key_queryAuthentication(apikey, apiKeyPrefix); + authInfo.addApiKeyQueryAuthentication(apikey, apiKeyPrefix); return authInfo; } - public static AuthInfo forHttp_basic_test(String username, String password) { + public static AuthInfo forHttpBasicTest(String username, String password) { AuthInfo authInfo = new AuthInfo(); - authInfo.addHttp_basic_testAuthentication(username, password); + authInfo.addHttpBasicTestAuthentication(username, password); return authInfo; } - public static AuthInfo forBearer_testAuthentication(String bearerToken) { + public static AuthInfo forBearerTestAuthentication(String bearerToken) { AuthInfo authInfo = new AuthInfo(); - authInfo.addBearer_testAuthentication(bearerToken); + authInfo.addBearerTestAuthentication(bearerToken); return authInfo; } }