apache / apache/servicecomb-java-chassis
[BUG] - JsonPropertyIntrospector处理record类型里的枚举值时,会报空指针异常
- Langage dominant
- Java
- Étoiles
- 1.9k
- Forks
- 814
- Merge moyen
- 8 j 23 h
- PR mergées (30 j)
- 1
Description
### 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_
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par org.apache.servicecomb.swagger.extend.introspector.JsonPropertyIntrospector.findPropertyDescription, identifié à la ligne 51 de la stack trace. Exécutez la reproduction MainTest fournie via SwaggerUtils.resolveTypeSchemas pour ClassRsp et RecordRsp, puis vérifiez que les propriétés de record contenant Lang ne lèvent plus de NullPointerException, tandis que le cas Class existant continue de fonctionner correctement.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- api, backend
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100