Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta
#4,983 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
48/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
java
Domínio
api, backend

Direção de pesquisa

Comece em org.apache.servicecomb.swagger.extend.introspector.JsonPropertyIntrospector.findPropertyDescription, identificado na linha 51 do stack trace. Execute a reprodução fornecida do MainTest por meio de SwaggerUtils.resolveTypeSchemas para ClassRsp e RecordRsp, e então verifique se as propriedades de record que contêm Lang não geram mais uma NullPointerException, enquanto o caso existente de Class continua funcionando corretamente.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
Java
Estrelas
1.9k
Forks
813
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

  • Sem Dockerfile nem arquivo Docker Compose
  • Tem um modelo de pull request
  • Sem guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de apache/servicecomb-java-chassis

Todas as issues de apache/servicecomb-java-chassis

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.