apache / apache/servicecomb-java-chassis
[BUG] - JsonPropertyIntrospector处理record类型里的枚举值时,会报空指针异常
- Lenguaje dominante
- Java
- Estrellas
- 1.9k
- Forks
- 814
- Merge medio
- 8 d 23 h
- PR fusionados (30 d)
- 1
Descripción
### Steps to Reproduce
简单示例:
```java
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_
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza en org.apache.servicecomb.swagger.extend.introspector.JsonPropertyIntrospector.findPropertyDescription, identificado en la línea 51 del stack trace. Ejecuta la reproducción proporcionada de MainTest mediante SwaggerUtils.resolveTypeSchemas tanto para ClassRsp como para RecordRsp, y verifica después que las propiedades de record que contienen Lang ya no provoquen una NullPointerException, mientras que el caso existente de Class siga funcionando correctamente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- api, backend
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 48/100