Description
When using JSR-107 CDI annotations (@CacheResult, @CachePut, @CacheRemove, etc.) together with @observes on Weld 3.1.2.Final, the application fails to start with a GenericSignatureFormatError.
Expected Behavior
The application should start successfully and the JCache CDI interceptors should work normally.
Actual Behavior
Startup fails during Weld bean processing with the following exception:
Caused by: java.lang.reflect.GenericSignatureFormatError: Signature Parse error: Expected Field Type Signature
Remaining input: javax.enterprise.event.TransactionPhase
at java.base/sun.reflect.generics.parser.SignatureParser.error(SignatureParser.java:124)
at java.base/sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:291)
at java.base/sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:277)
at java.base/sun.reflect.generics.parser.SignatureParser.parseTypeSignature(SignatureParser.java:469)
at java.base/sun.reflect.generics.parser.SignatureParser.parseTypeSig(SignatureParser.java:188)
at java.base/sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:438)
at java.base/sun.reflect.annotation.AnnotationParser.parseEnumValue(AnnotationParser.java:473)
at java.base/sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:344)
at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:282)
at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:227)
at java.base/sun.reflect.annotation.AnnotationParser.parseParameterAnnotations2(AnnotationParser.java:185)
at java.base/sun.reflect.annotation.AnnotationParser.parseParameterAnnotations(AnnotationParser.java:162)
at java.base/java.lang.reflect.Executable.parseParameterAnnotations(Executable.java:83)
at java.base/java.lang.reflect.Executable.sharedGetParameterAnnotations(Executable.java:567)
at java.base/java.lang.reflect.Method.getParameterAnnotations(Method.java:756)
at java.base/java.lang.reflect.Parameter.getDeclaredAnnotations(Parameter.java:318)
at java.base/java.lang.reflect.Parameter.getAnnotations(Parameter.java:358)
at org.jboss.weld.resources.HotspotReflectionCache.internalGetAnnotations(HotspotReflectionCache.java:58)
at org.jboss.weld.resources.DefaultReflectionCache.lambda$new$0(DefaultReflectionCache.java:40)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$null$0(ReentrantMapBackedComputingCache.java:55)
at org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
at org.jboss.weld.resources.DefaultReflectionCache.getAnnotations(DefaultReflectionCache.java:75)
at org.jboss.weld.annotated.slim.backed.BackedAnnotatedParameter.getAnnotations(BackedAnnotatedParameter.java:85)
at org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedParameterImpl.of(EnhancedAnnotatedParameterImpl.java:44)
at org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedMethodImpl.<init>(EnhancedAnnotatedMethodImpl.java:80)
at org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedMethodImpl.of(EnhancedAnnotatedMethodImpl.java:61)
at org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.<init>(EnhancedAnnotatedTypeImpl.java:224)
at org.jboss.weld.annotated.enhanced.jlr.EnhancedAnnotatedTypeImpl.of(EnhancedAnnotatedTypeImpl.java:134)
at org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:93)
at org.jboss.weld.resources.ClassTransformer$TransformSlimAnnotatedTypeToEnhancedAnnotatedType.apply(ClassTransformer.java:90)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.lambda$null$0(ReentrantMapBackedComputingCache.java:55)
at org.jboss.weld.util.LazyValueHolder$1.computeValue(LazyValueHolder.java:32)
at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:46)
at org.jboss.weld.util.cache.ReentrantMapBackedComputingCache.getValue(ReentrantMapBackedComputingCache.java:72)
at org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:251)
at org.jboss.weld.resources.ClassTransformer.getEnhancedAnnotatedType(ClassTransformer.java:232)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.initEnhancedSubclass(SubclassedComponentInstantiator.java:86)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.<init>(SubclassedComponentInstantiator.java:79)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.forInterceptedDecoratedBean(SubclassedComponentInstantiator.java:63)
at org.jboss.weld.injection.producer.BeanInjectionTarget.initializeAfterBeanDiscovery(BeanInjectionTarget.java:121)
at org.jboss.weld.injection.producer.InjectionTargetInitializationContext.initialize(InjectionTargetInitializationContext.java:42)
at org.jboss.weld.injection.producer.InjectionTargetService.initialize(InjectionTargetService.java:63)
at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:481)
at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:86)
at org.jboss.weld.environment.servlet.WeldServletLifecycle.initialize(WeldServletLifecycle.java:237)
at org.jboss.weld.environment.servlet.EnhancedListener.onStartup(EnhancedListener.java:62)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 25 more
The error occurs while Weld is processing annotations on parameters, particularly related to javax.enterprise.event.TransactionPhase.
Steps to Reproduce
- Create a Maven project with the following dependencies:
org.jsr107.ri:cache-annotations-ri-cdi:1.1.1
org.jboss.weld.servlet:weld-servlet-core:3.1.2.Final
com.github.ben-manes.caffeine:jcache:3.1.6
- Add a CDI bean using any JCache annotation (e.g.
@OrderCacheHolder ).
package com.russiavk;
import javax.cache.annotation.CacheDefaults;
import javax.cache.annotation.CacheResult;
import javax.cache.annotation.CachePut;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Initialized;
import javax.enterprise.event.Observes;
import javax.servlet.ServletContext;
@ApplicationScoped
@CacheDefaults(cacheName = "orderCache")
public class OrderCacheHolder implements IOrderCacheHolder{
private static ServletContext servletContext;
@SuppressWarnings("unused")
private void init(@Observes @Initialized(ApplicationScoped.class) Object pointless) {
servletContext = (ServletContext) pointless;
System.out.println("ServletContext initialized: " + servletContext.getContextPath());
}
@Override
@CacheResult
public Object get(String key) {
// ...
}
@Override
@CachePut
public void put(String key, Object value) {
// ...
}
@Override
@CacheRemove
public void remove(String key) throws NullPointerException {
// ...
}
public interface IOrderCacheHolder {
<T extends ISubmitDateOrderDTO> T get(String key) throws NullPointerException;
<T extends ISubmitDateOrderDTO> void put(String key, T value) throws NullPointerException;
void remove(String key) throws NullPointerException;
}
public interface ISubmitDateOrderDTO {
}
- Configure
beans.xml to enable the JCache interceptors:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
<interceptors>
<class>org.jsr107.ri.annotations.cdi.CacheResultInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CachePutInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CacheRemoveEntryInterceptor</class>
<class>org.jsr107.ri.annotations.cdi.CacheRemoveAllInterceptor</class>
</interceptors>
</beans>
- Deploy on Tomcat / WildFly / or any container using JDK 17 or higher.
- Start the application.
Environment
- JCache RI Version: 1.1.1 (cache-annotations-ri-cdi)
- CDI Implementation: Weld 3.1.2.Final
- JDK Version: JDK 17.0.XX / JDK 21 (tested)
- Servlet Container: Apache Tomcat 9
- OS: Windows
Additional Information
This appears to be a compatibility issue between older JCache CDI annotation RI and newer JDK's stricter generic signature parsing in reflection.
The problem is triggered when Weld scans methods containing certain javax.enterprise.event.* related annotations.
Description
When using JSR-107 CDI annotations (
@CacheResult,@CachePut,@CacheRemove, etc.) together with @observes on Weld 3.1.2.Final, the application fails to start with aGenericSignatureFormatError.Expected Behavior
The application should start successfully and the JCache CDI interceptors should work normally.
Actual Behavior
Startup fails during Weld bean processing with the following exception:
The error occurs while Weld is processing annotations on parameters, particularly related to
javax.enterprise.event.TransactionPhase.Steps to Reproduce
org.jsr107.ri:cache-annotations-ri-cdi:1.1.1org.jboss.weld.servlet:weld-servlet-core:3.1.2.Finalcom.github.ben-manes.caffeine:jcache:3.1.6@OrderCacheHolder).beans.xmlto enable the JCache interceptors:Environment
Additional Information
This appears to be a compatibility issue between older JCache CDI annotation RI and newer JDK's stricter generic signature parsing in reflection.
The problem is triggered when Weld scans methods containing certain
javax.enterprise.event.*related annotations.