From 045f4b60673eb9b236c1a6bc83ed5bd956a438c2 Mon Sep 17 00:00:00 2001 From: Nicklas Wiegandt Date: Wed, 17 Jul 2024 11:47:33 +0200 Subject: [PATCH] fix (JAVA SPRING RESTCLIENT) 19137: Fix missing imports when using withXml for Spring RestClient and fix its README (#19146) --- .../libraries/restclient/ApiClient.mustache | 4 ++ .../Java/libraries/restclient/README.mustache | 40 ++----------------- .../codegen/java/JavaClientCodegenTest.java | 22 ++++++++++ .../client/echo_api/java/restclient/README.md | 8 ++-- .../README.md | 8 ++-- .../java/restclient-nullable-arrays/README.md | 8 ++-- .../java/restclient-swagger2/README.md | 8 ++-- .../client/petstore/java/restclient/README.md | 8 ++-- 8 files changed, 50 insertions(+), 56 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/ApiClient.mustache index a55ae95070a..416e5ea895a 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/ApiClient.mustache @@ -1,5 +1,9 @@ package {{invokerPackage}}; +{{#withXml}} +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +{{/withXml}} import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/README.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/README.mustache index 247b48b0e19..ec6244a82dc 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/README.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/README.mustache @@ -23,12 +23,7 @@ Building the API client library requires: 1. Java 17+ -{{#jersey2}} -2. Maven (3.8.3+)/Gradle (7.2+) -{{/jersey2}} -{{^jersey2}} 2. Maven/Gradle -{{/jersey2}} ## Installation @@ -87,33 +82,6 @@ Then manually install the following JARs: - `target/{{{artifactId}}}-{{{artifactVersion}}}.jar` - `target/lib/*.jar` -{{#jersey2}} -## Usage - -To add a HTTP proxy for the API client, use `ClientConfig`: -```java -{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}} -import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; -import {{{invokerPackage}}}.*; -import {{{package}}}.{{{classname}}}; - -... - -ApiClient defaultClient = Configuration.getDefaultApiClient(); -ClientConfig clientConfig = defaultClient.getClientConfig(); -clientConfig.connectorProvider(new ApacheConnectorProvider()); -clientConfig.property(ClientProperties.PROXY_URI, "http://proxy_url_here"); -clientConfig.property(ClientProperties.PROXY_USERNAME, "proxy_username"); -clientConfig.property(ClientProperties.PROXY_PASSWORD, "proxy_password"); -defaultClient.setClientConfig(clientConfig); - -{{{classname}}} apiInstance = new {{{classname}}}(defaultClient); -{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}} -``` - -{{/jersey2}} ## Getting Started Please follow the [installation](#installation) instruction and execute the following Java code: @@ -128,7 +96,7 @@ import {{{package}}}.{{{classname}}}; public class {{{classname}}}Example { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("{{{basePath}}}"); {{#hasAuthMethods}}{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} // Configure HTTP basic authorization: {{{name}}} @@ -173,10 +141,10 @@ public class {{{classname}}}Example { try { {{#returnType}}{{{.}}} result = {{/returnType}}apiInstance.{{{operationId}}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}});{{#returnType}} System.out.println(result);{{/returnType}} - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling {{{classname}}}#{{{operationId}}}"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } 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 f335afb5663..a16014271aa 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 @@ -2955,4 +2955,26 @@ public class JavaClientCodegenTest { } + @Test public void testRestClientWithXML_issue_19137() { + final Path output = newTempFolder(); + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setLibrary(JavaClientCodegen.RESTCLIENT) + .setAdditionalProperties(Map.of( + CodegenConstants.API_PACKAGE, "xyz.abcdef.api", + CodegenConstants.WITH_XML, true + )) + .setInputSpec("src/test/resources/3_1/java/petstore.yaml") + .setOutputDir(output.toString().replace("\\", "/")); + + List files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate(); + + validateJavaSourceFiles(files); + TestUtils.assertFileContains( + output.resolve("src/main/java/xyz/abcdef/ApiClient.java"), + "import com.fasterxml.jackson.dataformat.xml.XmlMapper;", + "import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;" + ); + } + } diff --git a/samples/client/echo_api/java/restclient/README.md b/samples/client/echo_api/java/restclient/README.md index 5797ed235f2..dbfceaf19e8 100644 --- a/samples/client/echo_api/java/restclient/README.md +++ b/samples/client/echo_api/java/restclient/README.md @@ -89,7 +89,7 @@ import org.openapitools.client.api.AuthApi; public class AuthApiExample { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://localhost:3000"); // Configure HTTP basic authorization: http_auth @@ -101,10 +101,10 @@ public class AuthApiExample { try { String result = apiInstance.testAuthHttpBasic(); System.out.println(result); - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling AuthApi#testAuthHttpBasic"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } diff --git a/samples/client/others/java/restclient-useAbstractionForFiles/README.md b/samples/client/others/java/restclient-useAbstractionForFiles/README.md index c73486a0315..996790b4d07 100644 --- a/samples/client/others/java/restclient-useAbstractionForFiles/README.md +++ b/samples/client/others/java/restclient-useAbstractionForFiles/README.md @@ -89,17 +89,17 @@ import org.openapitools.client.api.ResourceApi; public class ResourceApiExample { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://localhost"); ResourceApi apiInstance = new ResourceApi(defaultClient); try { File result = apiInstance.resourceInResponse(); System.out.println(result); - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling ResourceApi#resourceInResponse"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } diff --git a/samples/client/petstore/java/restclient-nullable-arrays/README.md b/samples/client/petstore/java/restclient-nullable-arrays/README.md index 2f66a14f3e9..bbf22c81d65 100644 --- a/samples/client/petstore/java/restclient-nullable-arrays/README.md +++ b/samples/client/petstore/java/restclient-nullable-arrays/README.md @@ -89,17 +89,17 @@ import org.openapitools.client.api.DefaultApi; public class DefaultApiExample { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://localhost"); DefaultApi apiInstance = new DefaultApi(defaultClient); try { List result = apiInstance.nullableArrayTestGet(); System.out.println(result); - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling DefaultApi#nullableArrayTestGet"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } diff --git a/samples/client/petstore/java/restclient-swagger2/README.md b/samples/client/petstore/java/restclient-swagger2/README.md index f4a78e06f7b..38aee4a6be8 100644 --- a/samples/client/petstore/java/restclient-swagger2/README.md +++ b/samples/client/petstore/java/restclient-swagger2/README.md @@ -89,7 +89,7 @@ import org.openapitools.client.api.AnotherFakeApi; public class AnotherFakeApiExample { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://petstore.swagger.io:80/v2"); AnotherFakeApi apiInstance = new AnotherFakeApi(defaultClient); @@ -97,10 +97,10 @@ public class AnotherFakeApiExample { try { Client result = apiInstance.call123testSpecialTags(client); System.out.println(result); - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling AnotherFakeApi#call123testSpecialTags"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); } diff --git a/samples/client/petstore/java/restclient/README.md b/samples/client/petstore/java/restclient/README.md index f4a78e06f7b..38aee4a6be8 100644 --- a/samples/client/petstore/java/restclient/README.md +++ b/samples/client/petstore/java/restclient/README.md @@ -89,7 +89,7 @@ import org.openapitools.client.api.AnotherFakeApi; public class AnotherFakeApiExample { public static void main(String[] args) { - ApiClient defaultClient = Configuration.getDefaultApiClient(); + ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://petstore.swagger.io:80/v2"); AnotherFakeApi apiInstance = new AnotherFakeApi(defaultClient); @@ -97,10 +97,10 @@ public class AnotherFakeApiExample { try { Client result = apiInstance.call123testSpecialTags(client); System.out.println(result); - } catch (ApiException e) { + } catch (HttpStatusCodeException e) { System.err.println("Exception when calling AnotherFakeApi#call123testSpecialTags"); - System.err.println("Status code: " + e.getCode()); - System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); e.printStackTrace(); }