You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thorntail部署含多态REST API Payload的应用时出现空指针异常

根因定位

该空指针异常由Thorntail 2.5.0内置的低版本SmallRye OpenAPI组件导致,该版本在扫描标注了Jackson多态注解的抽象类参数时,未对类型对象做非空校验,且对标注在Setter方法上的多态注解兼容逻辑存在缺陷,最终触发NPE。

排查步骤

  • 先验证是否为OpenAPI组件导致:在项目配置文件project-defaults.yml中添加配置 thorntail.microprofile.openapi.enabled: false,重启应用如果不再报错即可确认根因。
  • 若确认是OpenAPI扫描问题,断点定位到异常栈中的TypeUtil.getAnnotation第281行,查看当前扫描的类信息,确认是否为多态Payload相关的类。

解决方案

方案1(最快,无需改业务代码)

若业务不需要自动生成OpenAPI接口文档,直接保留上述禁用OpenAPI扩展的配置即可完成部署。

方案2(保留OpenAPI能力,改注解位置)

将当前标注在setPayload方法上的@JsonTypeInfo和@JsonSubTypes注解移动到Payload抽象类的类定义上,示例代码如下:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "eventType")
@JsonSubTypes({
        @JsonSubTypes.Type(value = PayloadDocument.class, name = "document"),
        @JsonSubTypes.Type(value = PayloadCampaign.class, name = "campaign"),
        @JsonSubTypes.Type(value = PayloadMessage.class, name = "message")
})
public abstract class Payload {
    // 原有类逻辑不变
}

如果修改后仍报错,在Payload类上额外添加空的@Schema注解即可。

方案3(替换依赖)

排除Thorntail内置的低版本SmallRye OpenAPI依赖,手动引入修复了该NPE问题的1.1.2及以上版本SmallRye OpenAPI,需注意依赖版本兼容性,避免和Thorntail核心组件冲突。

内容的提问来源于stack exchange,提问作者Mike Brunner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:45:06