I have openapi (7.0.0) generated controllers and models running on Spring WebFlux server (5.x). Everything works locally, but when deploying to kubernetes pod, any PUT request fails (see stack trace below), while GET/DELETE call succeeds. GET returns a complex object, while the same complex object is used in PUT requests, so I suspect it is somehow related to the @RequestBody
annotation.
Caused by: java.lang.reflect.GenericSignatureFormatError: Signature Parse error: expected a class type
Remaining input: java/lang/Object
at java.base/sun.reflect.generics.parser.SignatureParser.error(Unknown Source)
at java.base/sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(Unknown Source)
at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSignature(Unknown Source)
at java.base/sun.reflect.generics.parser.SignatureParser.parseClassSig(Unknown Source)
at java.base/sun.reflect.generics.repository.ClassRepository.parse(Unknown Source)
at java.base/sun.reflect.generics.repository.ClassRepository.parse(Unknown Source)
at java.base/sun.reflect.generics.repository.AbstractRepository.<init>(Unknown Source)
at java.base/sun.reflect.generics.repository.GenericDeclRepository.<init>(Unknown Source)
at java.base/sun.reflect.generics.repository.ClassRepository.<init>(Unknown Source)
at java.base/sun.reflect.generics.repository.ClassRepository.make(Unknown Source)
at java.base/java.lang.Class.getGenericInfo(Unknown Source)
at java.base/java.lang.Class.getTypeParameters(Unknown Source)
at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(Unknown Source)
at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(Unknown Source)
at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(Unknown Source)
at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(Unknown Source)
at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source)
at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source)
at java.base/sun.reflect.generics.repository.MethodRepository.computeReturnType(Unknown Source)
at java.base/sun.reflect.generics.repository.MethodRepository.getReturnType(Unknown Source)
at java.base/java.lang.reflect.Method.getGenericReturnType(Unknown Source)
at org.hibernate.validator.internal.properties.javabean.JavaBeanMethod.<init>(JavaBeanMethod.java:20)
at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:132)
at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:120)
at org.hibernate.validator.internal.properties.javabean.JavaBeanHelper.executable(JavaBeanHelper.java:112)
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.findExecutableMetaData(AnnotationMetaDataProvider.java:307)
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getMetaData(AnnotationMetaDataProvider.java:292)
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getMethodMetaData(AnnotationMetaDataProvider.java:279)
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.retrieveBeanConfiguration(AnnotationMetaDataProvider.java:130)
at org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider.getBeanConfiguration(AnnotationMetaDataProvider.java:120)
at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanConfigurationForHierarchy(BeanMetaDataManagerImpl.java:234)
at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.createBeanMetaData(BeanMetaDataManagerImpl.java:201)
at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanMetaData(BeanMetaDataManagerImpl.java:165)
at org.hibernate.validator.internal.engine.ValidatorImpl.buildNewLocalExecutionContext(ValidatorImpl.java:772)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedAnnotatedObjectForCurrentGroup(ValidatorImpl.java:627)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:590)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateParametersInContext(ValidatorImpl.java:880)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:283)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:235)
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
I was able to resolve this issue by upgrading from JDK 17.0.4.1 to JDK 17.0.6. Looks like this was a JDK bug which was fixed in 17.0.5: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8282241