mirror of https://github.com/halo-dev/halo
fix: ignore conversion exceptions for plugin configuration to prevent program errors (#6924)
#### 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 使用的问题 ```pull/6939/head
parent
fae03d4a5b
commit
17ec34c75e
|
@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.beans.factory.DisposableBean;
|
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.Controller;
|
||||||
import run.halo.app.extension.controller.ControllerBuilder;
|
import run.halo.app.extension.controller.ControllerBuilder;
|
||||||
import run.halo.app.extension.controller.Reconciler;
|
import run.halo.app.extension.controller.Reconciler;
|
||||||
import run.halo.app.infra.utils.JsonParseException;
|
|
||||||
import run.halo.app.infra.utils.JsonUtils;
|
import run.halo.app.infra.utils.JsonUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,6 +35,7 @@ import run.halo.app.infra.utils.JsonUtils;
|
||||||
* @author guqing
|
* @author guqing
|
||||||
* @since 2.0.0
|
* @since 2.0.0
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
public class DefaultReactiveSettingFetcher
|
public class DefaultReactiveSettingFetcher
|
||||||
implements ReactiveSettingFetcher, Reconciler<Reconciler.Request>, DisposableBean,
|
implements ReactiveSettingFetcher, Reconciler<Reconciler.Request>, DisposableBean,
|
||||||
ApplicationContextAware {
|
ApplicationContextAware {
|
||||||
|
@ -130,12 +131,21 @@ public class DefaultReactiveSettingFetcher
|
||||||
try {
|
try {
|
||||||
return JsonUtils.DEFAULT_JSON_MAPPER.readTree(json);
|
return JsonUtils.DEFAULT_JSON_MAPPER.readTree(json);
|
||||||
} catch (JsonProcessingException e) {
|
} 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> T convertValue(JsonNode jsonNode, Class<T> clazz) {
|
private <T> T convertValue(JsonNode jsonNode, Class<T> clazz) {
|
||||||
|
try {
|
||||||
return JsonUtils.DEFAULT_JSON_MAPPER.convertValue(jsonNode, clazz);
|
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
|
@NonNull
|
||||||
|
|
Loading…
Reference in New Issue