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
guqing 2024-10-23 16:40:20 +08:00 committed by GitHub
parent fae03d4a5b
commit 17ec34c75e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 3 deletions

View File

@ -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<Reconciler.Request>, 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> T convertValue(JsonNode jsonNode, Class<T> 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