TP-59445 | PS | handling empty body in network calls (#10024)
Co-authored-by: Sayed Owais Ali <sayed.owais@navi.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import com.google.gson.GsonBuilder
|
||||
import com.navi.ap.utils.registerApUiTronDeSerializers
|
||||
import com.navi.base.utils.BaseUtils
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.naviwidgets.WidgetDataDeserializer
|
||||
import com.navi.naviwidgets.models.GenericWidgetDataInfo
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
@@ -93,6 +94,7 @@ object NetworkModule {
|
||||
val updatedBaseUrl = BaseUtils.getUpdatedBaseUrl()
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory())
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -114,6 +116,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory())
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -131,6 +134,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory())
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.navi.ap.utils.registerApUiTronDeSerializers
|
||||
import com.navi.base.utils.BaseUtils
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.naviwidgets.WidgetDataDeserializer
|
||||
import com.navi.naviwidgets.models.GenericWidgetDataInfo
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
@@ -46,6 +47,7 @@ fun createRetrofitClient(okttpClientBuilder: OkHttpClient.Builder): Retrofit {
|
||||
.create()
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory())
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(okttpClientBuilder.build())
|
||||
.build()
|
||||
@@ -101,6 +103,7 @@ fun createCdnRetrofitClient(okttpClientBuilder: OkHttpClient.Builder): Retrofit
|
||||
val percentDeserializer = GsonBuilder().create()
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(BuildConfig.BASE_URL)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory())
|
||||
.addConverterFactory(ScalarsConverterFactory.create())
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(okttpClientBuilder.build())
|
||||
|
||||
@@ -18,6 +18,8 @@ import com.navi.ap.network.retrofit.service.APRetrofitService
|
||||
import com.navi.ap.utils.registerApUiTronDeSerializers
|
||||
import com.navi.ap.utils.registerPLSpecificDeSerializers
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.uitron.model.action.ThirdPartySdkAction
|
||||
import com.navi.common.uitron.model.action.UploadDataConfig
|
||||
import com.navi.common.uitron.serializer.AnySerializer
|
||||
@@ -88,6 +90,7 @@ object APNetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.buildConfigDetails.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AP.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviApHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -15,7 +15,9 @@ import com.navi.amc.network.retrofit.RetrofitService
|
||||
import com.navi.amc.network.util.getNetworkInfo
|
||||
import com.navi.amc.network.util.getNetworkInfoSuperApp
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.response.CardType
|
||||
import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
@@ -74,6 +76,7 @@ object NetworkModule {
|
||||
): RetrofitService {
|
||||
val retrofit = Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AMC.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -90,6 +93,7 @@ object NetworkModule {
|
||||
): RetrofitService {
|
||||
val retrofit = Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AMC.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -19,7 +19,9 @@ import com.navi.bbps.network.NaviBbpsHttpClient
|
||||
import com.navi.bbps.network.service.NaviBbpsRetrofitService
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
@@ -72,6 +74,7 @@ object NaviBbpsNetworkModule {
|
||||
Retrofit.Builder()
|
||||
.baseUrl(naviBbpsHttpClient.networkInfo.baseUrl)
|
||||
.client(naviBbpsHttpClient.httpClientBuilder.build())
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.BBPS.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.build()
|
||||
|
||||
|
||||
@@ -15,7 +15,9 @@ import com.navi.chat.network.retrofit.NaviChatHttpClient
|
||||
import com.navi.chat.provider.firestore.FireStoreDataProvider
|
||||
import com.navi.chat.repositories.NaviChatRepository
|
||||
import com.navi.chat.utils.ChatJsonDeserializer
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.network.BaseUrls
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.naviwidgets.models.NaviChatWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
|
||||
@@ -47,6 +49,7 @@ object NaviChatModule {
|
||||
): Retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(baseUrls.superAppBaseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.CHAT.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(provideGson()))
|
||||
.client(naviChatHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -8,7 +8,9 @@ import com.navi.coin.network.retrofit.RetrofitService
|
||||
import com.navi.coin.utils.CountDownFacade
|
||||
import com.navi.coin.utils.ICountDownHelper
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.utils.registerUiTronDeSerializers
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
@@ -57,6 +59,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COIN.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -11,10 +11,12 @@ import android.app.Application
|
||||
import com.navi.base.deeplink.DeepLinkManager
|
||||
import com.navi.base.deeplink.listener.DeepLinkListener
|
||||
import com.navi.common.model.BuildConfigDetails
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.ApiConstants
|
||||
import com.navi.common.network.authenticator.AuthenticationRetrofitService
|
||||
import com.navi.common.network.authenticator.AuthenticatorHttpClient
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.network.retrofit.CommonHttpClient
|
||||
import com.navi.common.network.retrofit.RetrofitService
|
||||
import com.navi.common.upi.UpiSdkHelper
|
||||
@@ -98,6 +100,7 @@ object CommonLibManager {
|
||||
val retrofitClient =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COMMON.name))
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(okttpClientBuilder.build())
|
||||
.build()
|
||||
@@ -111,6 +114,7 @@ object CommonLibManager {
|
||||
val retrofitClient =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COMMON.name))
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(okttpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.common.network.converter
|
||||
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import java.lang.reflect.Type
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Converter
|
||||
import retrofit2.Retrofit
|
||||
|
||||
class EmptyBodyHandlingConverterFactory(private val moduleName: String? = null) :
|
||||
Converter.Factory() {
|
||||
|
||||
companion object {
|
||||
const val TAG = "EmptyBodyHandler"
|
||||
private const val EMPTY_EVENT_NAME = "empty_body_response_error"
|
||||
}
|
||||
|
||||
override fun responseBodyConverter(
|
||||
type: Type,
|
||||
annotations: Array<out Annotation>,
|
||||
retrofit: Retrofit
|
||||
) =
|
||||
object : Converter<ResponseBody, Any?> {
|
||||
|
||||
val nextResponseBodyConverter =
|
||||
retrofit.nextResponseBodyConverter<Any?>(
|
||||
this@EmptyBodyHandlingConverterFactory,
|
||||
type,
|
||||
annotations
|
||||
)
|
||||
|
||||
override fun convert(value: ResponseBody): Any? {
|
||||
return if (value.contentLength() != 0L) {
|
||||
nextResponseBodyConverter.convert(value)
|
||||
} else {
|
||||
CommonNaviAnalytics.naviAnalytics
|
||||
.Errors()
|
||||
.onApiFailure("${moduleName.orEmpty()}$EMPTY_EVENT_NAME", null, null, null)
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,9 @@ package com.navi.gold.di
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.gold.getNetworkInfo
|
||||
import com.navi.gold.getNetworkInfoSuperApp
|
||||
import com.navi.gold.retrofit.NaviHttpClient
|
||||
@@ -67,6 +69,7 @@ object NetworkModule {
|
||||
): RetrofitService {
|
||||
val retrofit = Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.KUBER.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -83,6 +86,7 @@ object NetworkModule {
|
||||
): RetrofitService {
|
||||
val retrofit = Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.KUBER.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -10,7 +10,9 @@ package com.navi.homeloan.common.network.di
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.homeloan.common.network.retrofit.NaviHttpClient
|
||||
import com.navi.homeloan.common.network.retrofit.RetrofitService
|
||||
import com.navi.homeloan.common.utils.getNetworkInfo
|
||||
@@ -73,6 +75,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.HL.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -89,6 +92,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.HL.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.google.gson.GsonBuilder
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.insurance.common.deserializer.ActionDeserializer
|
||||
import com.navi.insurance.common.deserializer.ChatInputDeserializer
|
||||
import com.navi.insurance.common.deserializer.ChatMessageDeserializer
|
||||
@@ -76,6 +77,7 @@ object NetworkModule {
|
||||
): Retrofit {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.GI.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
@@ -13,7 +13,9 @@ import com.google.android.play.core.splitinstall.SplitInstallHelper
|
||||
import com.google.gson.Gson
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.pay.common.cache.ImageCache
|
||||
import com.navi.pay.common.cache.ImageCacheImpl
|
||||
@@ -101,6 +103,7 @@ object NaviPayNetworkModule {
|
||||
Retrofit.Builder()
|
||||
.baseUrl(naviPayHttpClient.networkInfo.baseUrl)
|
||||
.client(naviPayHttpClient.httpClientBuilder.build())
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVIPAY.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.build()
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.navi.payment.network.di
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.common.utils.registerUiTronDeSerializers
|
||||
import com.navi.payment.model.initiatesdk.InitiatePaymentSDKConfig
|
||||
import com.navi.payment.model.paymentresult.PaymentSDKActionConfig
|
||||
@@ -69,6 +71,7 @@ object PaymentNetworkModule {
|
||||
): Retrofit {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVI_PAYMENT_SCREEN.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -121,6 +124,7 @@ object PaymentNetworkModule {
|
||||
fun getPaymentRetrofitService(): RetrofitService {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVI_PAYMENT_SCREEN.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(providesPaymentDeserializer()))
|
||||
.client(
|
||||
NaviHttpClient(
|
||||
|
||||
@@ -9,7 +9,9 @@ package com.navi.rr.network.di
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.navi.common.CommonLibManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.NetworkInfo
|
||||
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
|
||||
import com.navi.rr.network.retrofit.NaviHttpClient
|
||||
import com.navi.rr.network.retrofit.RetrofitService
|
||||
import com.navi.rr.network.util.getNetworkInfo
|
||||
@@ -73,6 +75,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(deserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
@@ -89,6 +92,7 @@ object NetworkModule {
|
||||
val retrofit =
|
||||
Retrofit.Builder()
|
||||
.baseUrl(CommonLibManager.baseUrl)
|
||||
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name))
|
||||
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
|
||||
.client(naviHttpClient.httpClientBuilder.build())
|
||||
.build()
|
||||
|
||||
Reference in New Issue
Block a user