Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[BUG] - JsonPropertyIntrospector处理record类型里的枚举值时,会报空指针异常

未关闭
#4,983 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
java
领域
api, backend

调研方向

从堆栈跟踪第 51 行确定的 org.apache.servicecomb.swagger.extend.introspector.JsonPropertyIntrospector.findPropertyDescription 开始。通过 SwaggerUtils.resolveTypeSchemas 对 ClassRsp 和 RecordRsp 运行提供的 MainTest 复现,然后验证包含 Lang 的 record 属性不再引发 NullPointerException,同时现有的 Class 情况仍然成功。

由索引模型根据 Issue 内容生成。

描述

bug
Steps to Reproduce

简单示例:

package test;

import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.models.OpenAPI;

import org.apache.servicecomb.swagger.SwaggerUtils;
import org.junit.jupiter.api.Test;

class MainTest {
    @Test
    void test() {
        SwaggerUtils.resolveTypeSchemas(new OpenAPI(), ClassRsp.class); // OK
        SwaggerUtils.resolveTypeSchemas(new OpenAPI(), RecordRsp.class); // ERROR
    }

    public enum Lang {
        JAVA, CHINESE, UNKNOWN;
    }

    public static class ClassRsp {
        @Schema(description = "language")
        private Lang lang;

        public Lang getLang() {
            return lang;
        }

        public void setLang(Lang lang) {
            this.lang = lang;
        }
    }

    public record RecordRsp(
            @Schema(description = "language") Lang lang
    ) {}
}
Expected Behavior

报错:

java.lang.NullPointerException: Cannot invoke "java.lang.reflect.AnnotatedElement.getAnnotations()" because the return value of "com.fasterxml.jackson.databind.introspect.Annotated.getAnnotated()" is null

	at org.apache.servicecomb.swagger.extend.introspector.JsonPropertyIntrospector.findPropertyDescription(JsonPropertyIntrospector.java:51)
	at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findPropertyDescription(AnnotationIntrospectorPair.java:450)
	at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getMetadata(POJOPropertyBuilder.java:228)
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._anyIndexed(POJOPropertiesCollector.java:1376)
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._sortProperties(POJOPropertiesCollector.java:1278)
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:529)
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getPropertyMap(POJOPropertiesCollector.java:413)
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getProperties(POJOPropertiesCollector.java:255)
	at com.fasterxml.jackson.databind.introspect.BasicBeanDescription._properties(BasicBeanDescription.java:164)
	at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findProperties(BasicBeanDescription.java:239)
	at io.swagger.v3.core.jackson.ModelResolver.resolveAccessMode(ModelResolver.java:1960)
	at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:672)
	at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolve(ModelResolverExt.java:110)
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97)
	at io.swagger.v3.core.converter.ModelConverters.resolveAsResolvedSchema(ModelConverters.java:158)
	at org.apache.servicecomb.swagger.SwaggerUtils.resolveTypeSchemas(SwaggerUtils.java:213)
	at test.MainTest.test(MainTest.java:13)
Servicecomb Version

No response

Additional Context

No response

主要语言
Java
星标
1.9k
派生
813
平均合并
8 天 23 小时
30 天内合并 PR
1

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/servicecomb-java-chassis 的其他 Issue

查看 apache/servicecomb-java-chassis 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。