From 0601e8fb1751bf05a038056881adc569da57a8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?= <42696884+azouever@users.noreply.github.com> Date: Wed, 12 Jan 2022 17:26:11 +0800 Subject: [PATCH] :art: fix GsonBuilder singleton NPE --- .../common/util/json/WxGsonBuilder.java | 82 ++++----- .../weixin/cp/util/json/WxCpGsonBuilder.java | 86 +++++----- .../wx/miniapp/json/WxMaGsonBuilder.java | 2 +- .../weixin/mp/util/json/WxMpGsonBuilder.java | 158 +++++++++--------- .../open/util/json/WxOpenGsonBuilder.java | 2 +- 5 files changed, 165 insertions(+), 165 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java index 71304dc79..ff260c16f 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java @@ -1,41 +1,41 @@ -package me.chanjar.weixin.common.util.json; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import me.chanjar.weixin.common.bean.WxAccessToken; -import me.chanjar.weixin.common.bean.WxNetCheckResult; -import me.chanjar.weixin.common.bean.menu.WxMenu; -import me.chanjar.weixin.common.error.WxError; -import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; -import java.util.Objects; - -/** - * . - * @author chanjarster - */ -public class WxGsonBuilder { - private static final GsonBuilder INSTANCE = new GsonBuilder(); - private static volatile Gson GSON_INSTANCE; - - static { - INSTANCE.disableHtmlEscaping(); - INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter()); - INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter()); - INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter()); - INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter()); - - } - - public static Gson create() { - if (Objects.isNull(GSON_INSTANCE)) { - synchronized (GSON_INSTANCE) { - if (Objects.isNull(GSON_INSTANCE)) { - GSON_INSTANCE = INSTANCE.create(); - } - } - } - return GSON_INSTANCE; - } - -} +package me.chanjar.weixin.common.util.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import me.chanjar.weixin.common.bean.WxAccessToken; +import me.chanjar.weixin.common.bean.WxNetCheckResult; +import me.chanjar.weixin.common.bean.menu.WxMenu; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; +import java.util.Objects; + +/** + * . + * @author chanjarster + */ +public class WxGsonBuilder { + private static final GsonBuilder INSTANCE = new GsonBuilder(); + private static volatile Gson GSON_INSTANCE; + + static { + INSTANCE.disableHtmlEscaping(); + INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter()); + INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter()); + INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter()); + INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter()); + + } + + public static Gson create() { + if (Objects.isNull(GSON_INSTANCE)) { + synchronized (INSTANCE) { + if (Objects.isNull(GSON_INSTANCE)) { + GSON_INSTANCE = INSTANCE.create(); + } + } + } + return GSON_INSTANCE; + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java index c7179aa16..098935bf0 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java @@ -1,43 +1,43 @@ -package me.chanjar.weixin.cp.util.json; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import me.chanjar.weixin.common.bean.menu.WxMenu; -import me.chanjar.weixin.common.error.WxError; -import me.chanjar.weixin.common.util.json.WxErrorAdapter; -import me.chanjar.weixin.cp.bean.WxCpChat; -import me.chanjar.weixin.cp.bean.WxCpDepart; -import me.chanjar.weixin.cp.bean.WxCpTag; -import me.chanjar.weixin.cp.bean.WxCpUser; -import java.util.Objects; - -/** - * @author Daniel Qian - */ -public class WxCpGsonBuilder { - - private static final GsonBuilder INSTANCE = new GsonBuilder(); - private static volatile Gson GSON_INSTANCE; - - static { - INSTANCE.disableHtmlEscaping(); - INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter()); - INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter()); - INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter()); - INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter()); - INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter()); - INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter()); - } - - public static Gson create() { - if (Objects.isNull(GSON_INSTANCE)) { - synchronized (GSON_INSTANCE) { - if (Objects.isNull(GSON_INSTANCE)) { - GSON_INSTANCE = INSTANCE.create(); - } - } - } - return GSON_INSTANCE; - } - -} +package me.chanjar.weixin.cp.util.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import me.chanjar.weixin.common.bean.menu.WxMenu; +import me.chanjar.weixin.common.error.WxError; +import me.chanjar.weixin.common.util.json.WxErrorAdapter; +import me.chanjar.weixin.cp.bean.WxCpChat; +import me.chanjar.weixin.cp.bean.WxCpDepart; +import me.chanjar.weixin.cp.bean.WxCpTag; +import me.chanjar.weixin.cp.bean.WxCpUser; +import java.util.Objects; + +/** + * @author Daniel Qian + */ +public class WxCpGsonBuilder { + + private static final GsonBuilder INSTANCE = new GsonBuilder(); + private static volatile Gson GSON_INSTANCE; + + static { + INSTANCE.disableHtmlEscaping(); + INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter()); + INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter()); + INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter()); + INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter()); + INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter()); + INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter()); + } + + public static Gson create() { + if (Objects.isNull(GSON_INSTANCE)) { + synchronized (INSTANCE) { + if (Objects.isNull(GSON_INSTANCE)) { + GSON_INSTANCE = INSTANCE.create(); + } + } + } + return GSON_INSTANCE; + } + +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java index cfa609058..537982665 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java @@ -34,7 +34,7 @@ public class WxMaGsonBuilder { public static Gson create() { if (Objects.isNull(GSON_INSTANCE)) { - synchronized (GSON_INSTANCE) { + synchronized (INSTANCE) { if (Objects.isNull(GSON_INSTANCE)) { GSON_INSTANCE = INSTANCE.create(); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java index b7773f503..53c39a0c4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java @@ -1,79 +1,79 @@ -package me.chanjar.weixin.mp.util.json; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import me.chanjar.weixin.mp.bean.*; -import me.chanjar.weixin.mp.bean.card.WxMpCard; -import me.chanjar.weixin.mp.bean.card.WxMpCardResult; -import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; -import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; -import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; -import me.chanjar.weixin.mp.bean.material.*; -import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult; -import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult; -import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult; -import me.chanjar.weixin.mp.bean.result.*; -import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; -import java.util.Objects; - -/** - * @author someone - */ -public class WxMpGsonBuilder { - - private static final GsonBuilder INSTANCE = new GsonBuilder(); - private static volatile Gson GSON_INSTANCE; - - static { - INSTANCE.disableHtmlEscaping(); - INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter()); - INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter()); - INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter()); - INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter()); - INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter()); - INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter()); - INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter()); - } - - public static Gson create() { - if (Objects.isNull(GSON_INSTANCE)) { - synchronized (GSON_INSTANCE) { - if (Objects.isNull(GSON_INSTANCE)) { - GSON_INSTANCE = INSTANCE.create(); - } - } - } - return GSON_INSTANCE; - } - -} +package me.chanjar.weixin.mp.util.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import me.chanjar.weixin.mp.bean.*; +import me.chanjar.weixin.mp.bean.card.WxMpCard; +import me.chanjar.weixin.mp.bean.card.WxMpCardResult; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate; +import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary; +import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; +import me.chanjar.weixin.mp.bean.material.*; +import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult; +import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult; +import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult; +import me.chanjar.weixin.mp.bean.result.*; +import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import java.util.Objects; + +/** + * @author someone + */ +public class WxMpGsonBuilder { + + private static final GsonBuilder INSTANCE = new GsonBuilder(); + private static volatile Gson GSON_INSTANCE; + + static { + INSTANCE.disableHtmlEscaping(); + INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter()); + INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter()); + INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter()); + INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter()); + INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter()); + INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter()); + INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter()); + } + + public static Gson create() { + if (Objects.isNull(GSON_INSTANCE)) { + synchronized (INSTANCE) { + if (Objects.isNull(GSON_INSTANCE)) { + GSON_INSTANCE = INSTANCE.create(); + } + } + } + return GSON_INSTANCE; + } + +} diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java index cfed3f084..5dbae037a 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java @@ -32,7 +32,7 @@ public class WxOpenGsonBuilder { public static Gson create() { if (Objects.isNull(GSON_INSTANCE)) { - synchronized (GSON_INSTANCE) { + synchronized (INSTANCE) { if (Objects.isNull(GSON_INSTANCE)) { GSON_INSTANCE = INSTANCE.create(); }