From da37e980d3fffb379bd8b7683dc08a4a8eebd671 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 17 Apr 2021 18:25:32 +0800 Subject: [PATCH] [Kotlin]] add support for binary response (#9284) * Support File responses for Kotlin client * Regen samples * Reset version * Fix file class check * Add imports * use Files.createTempFile instead * better tmp file naming Co-authored-by: Mischa Spiegelmock --- .../jvm-okhttp/infrastructure/ApiClient.kt.mustache | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ 13 files changed, 156 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index 0d834b1e55c..aa5a275a9f3 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -25,7 +25,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date {{^threetenbp}} import java.time.LocalDate @@ -171,6 +174,15 @@ import org.threeten.bp.OffsetTime if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.{{packageName}}", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).fromJson(bodyContent){{/moshi}}{{#gson}}Serializer.gson.fromJson(bodyContent, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java){{/jackson}} else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bcbb1cf8627..8ffe5403596 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.gson.fromJson(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 637ca64c247..0ea33dc522c 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index e1d5bc9c412..cd2898923dd 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bcbb1cf8627..8ffe5403596 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.gson.fromJson(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4..bc9ed02c0f1 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c4da8e3989b..d43c0c614d5 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ internal open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4..bc9ed02c0f1 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 9d526273d7a..8fad7b08960 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -11,7 +11,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -112,6 +115,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4..bc9ed02c0f1 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 135bcdc790e..bd683341896 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c34e9e42d08..a9f5f6ce2a2 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4..bc9ed02c0f1 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.")