From c59243c9bdabf07137ad0f070b6ecbde57e66466 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 1 Sep 2020 09:54:21 -0300 Subject: [wallet] don't crash on serialization errors from wallet-core This should not be necessary if we had a stable API with documentated and versioned changes, but well... --- .../java/net/taler/wallet/backend/WalletBackendApi.kt | 15 +++++++++++---- .../java/net/taler/wallet/payment/PaymentResponsesTest.kt | 1 - 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'wallet/src') diff --git a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt index c6261bf..a72df9c 100644 --- a/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt +++ b/wallet/src/main/java/net/taler/wallet/backend/WalletBackendApi.kt @@ -158,12 +158,19 @@ class WalletBackendApi( } sendRequest(operation, args?.invoke(JSONObject())) { isError, message -> val response = if (isError) { - val error = json.decodeFromString(WalletErrorInfo.serializer(), message.toString()) + val error = + json.decodeFromString(WalletErrorInfo.serializer(), message.toString()) WalletResponse.Error(error) } else { - @Suppress("UNCHECKED_CAST") // if serializer is null, T must be Unit - val t: T = serializer?.let { json.decodeFromString(serializer, message.toString()) } ?: Unit as T - WalletResponse.Success(t) + try { + val t: T = serializer?.let { + json.decodeFromString(serializer, message.toString()) + } ?: Unit as T + WalletResponse.Success(t) + } catch (e: Exception) { + val info = WalletErrorInfo(0, "", e.toString(), null) + WalletResponse.Error(info) + } } cont.resume(response) } diff --git a/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt b/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt index 15702c6..fbdc07d 100644 --- a/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt +++ b/wallet/src/test/java/net/taler/wallet/payment/PaymentResponsesTest.kt @@ -57,7 +57,6 @@ class PaymentResponsesTest { "max_wire_fee": "CHF:0.1", "max_fee": "CHF:0.1", "wire_fee_amortization": 10, - "merchant_base_url": "https:\/\/backend.chf.taler.net\/instances\/department\/", "merchant": { "name": "BFH Department Technik und Informatik", "instance": "department" -- cgit v1.2.3