From 17ec34c75e4ba6094c740808bbf71cbd979de21c Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:40:20 +0800 Subject: [PATCH] fix: ignore conversion exceptions for plugin configuration to prevent program errors (#6924) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug /area plugin /milestone 2.20.x #### What this PR does / why we need it: 修复插件配置可能因为缺少校验导致使用时类型转换失败从而影响 Halo 使用的问题 #### Which issue(s) this PR fixes: Fixes #6899 #### Does this PR introduce a user-facing change? ```release-note 修复插件配置可能因为缺少校验导致使用时类型转换失败从而影响 Halo 使用的问题 ``` --- .../plugin/DefaultReactiveSettingFetcher.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/run/halo/app/plugin/DefaultReactiveSettingFetcher.java b/application/src/main/java/run/halo/app/plugin/DefaultReactiveSettingFetcher.java index 397e3ff9c..835f5bb25 100644 --- a/application/src/main/java/run/halo/app/plugin/DefaultReactiveSettingFetcher.java +++ b/application/src/main/java/run/halo/app/plugin/DefaultReactiveSettingFetcher.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; @@ -26,7 +27,6 @@ import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.extension.controller.Controller; import run.halo.app.extension.controller.ControllerBuilder; import run.halo.app.extension.controller.Reconciler; -import run.halo.app.infra.utils.JsonParseException; import run.halo.app.infra.utils.JsonUtils; /** @@ -35,6 +35,7 @@ import run.halo.app.infra.utils.JsonUtils; * @author guqing * @since 2.0.0 */ +@Slf4j public class DefaultReactiveSettingFetcher implements ReactiveSettingFetcher, Reconciler, DisposableBean, ApplicationContextAware { @@ -130,12 +131,21 @@ public class DefaultReactiveSettingFetcher try { return JsonUtils.DEFAULT_JSON_MAPPER.readTree(json); } catch (JsonProcessingException e) { - throw new JsonParseException(e); + // ignore + log.error("Failed to parse plugin [{}] config json: [{}]", pluginName, json, e); } + return JsonNodeFactory.instance.missingNode(); } private T convertValue(JsonNode jsonNode, Class clazz) { - return JsonUtils.DEFAULT_JSON_MAPPER.convertValue(jsonNode, clazz); + try { + return JsonUtils.DEFAULT_JSON_MAPPER.convertValue(jsonNode, clazz); + } catch (IllegalArgumentException e) { + // ignore + log.error("Failed to convert plugin [{}] configMap [{}] to class [{}]", + pluginName, configMapName, clazz, e); + } + return null; } @NonNull