diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt index 225807055..fa6a7e7b4 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt @@ -197,7 +197,7 @@ class ApiClientHelper private constructor( val responseBody = responseBytes.asString() logErrorResponseIfNeeded(requestId, requestTime, httpResponse.statusCode, responseBody) val ecwidError = if (responseBody.isNotBlank()) { - jsonTransformer.deserialize(responseBody, EcwidApiError::class.java) + jsonTransformer.deserializeOrNull(responseBody, EcwidApiError::class.java) } else { null } diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/JsonTransformer.kt b/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/JsonTransformer.kt index 81b3c9cab..7ac10317d 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/JsonTransformer.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/JsonTransformer.kt @@ -2,5 +2,6 @@ package com.ecwid.apiclient.v3.jsontransformer interface JsonTransformer { fun serialize(src: Any?, srcExt: Any? = null): String - fun deserialize(json: String, clazz: Class): V? + fun deserialize(json: String, clazz: Class): V + fun deserializeOrNull(json: String, clazz: Class): V? } diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformer.kt b/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformer.kt index ddb5532e9..2d3dcef08 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformer.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformer.kt @@ -36,13 +36,21 @@ class GsonTransformer(polymorphicTypes: List>) : JsonTransfor } } - override fun deserialize(json: String, clazz: Class): V? { + override fun deserialize(json: String, clazz: Class): V { try { return gson.fromJson(json, clazz) } catch (e: JsonParseException) { throw JsonDeserializationException(e.message, e) } } + + override fun deserializeOrNull(json: String, clazz: Class): V? { + return try { + return gson.fromJson(json, clazz) + } catch (e: JsonParseException) { + null + } + } } private fun JsonObject.mergeJsonObject(from: JsonObject) { diff --git a/src/test/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformerTest.kt b/src/test/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformerTest.kt index aa395e59f..780d29497 100644 --- a/src/test/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformerTest.kt +++ b/src/test/kotlin/com/ecwid/apiclient/v3/jsontransformer/gson/GsonTransformerTest.kt @@ -230,6 +230,13 @@ internal class GsonTransformerTest { ) } + @Test + fun `deserializeOrNull of broken ParsedResponseWithExt`() { + val json = "'testField': {'baseField': 'base', 'extField': 'ext'}}" + val deserializedValue = transformer.deserializeOrNull(json, TestParsedResponseWithExt::class.java) + assertEquals(null, deserializedValue) + } + } private fun assertJsonEquals(expected: String, actual: String) {