Hi all!
I am trying to use Weld on Apache Karaf 3.0.x.
I OSGified an integration provided by Apache: https://github.com/apache/cxf/blob/master/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
but it does not work actually.
Maybe some of you can help with this problem: https://issues.apache.org/jira/browse/CXF-6221
After connecting a debugger, it is some problem with caching or incompatibility. Instead of pure annotation class I can see 'com.sun.proxy'. Because of that 'isAnnotationPresent' invoked on BackedAnnotatedType returns false. CXF integration and my class annotated with 'ApplicationPath' are in separate bundles.
Appreciate for any help.
===
Going deeper, I find out that for some reason JAX-RS annotation equality not work here:
/weld-core-2.2.4.Final-sources.jar!/org/jboss/weld/annotated/slim/backed/BackedAnnotatedType.java
public T getAnnotation(Class annotationType) { for (Annotation annotation : getAnnotations()) { if (annotation.annotationType().equals(annotationType)) { return annotationType.cast(annotation); } } return null; }
annotation type => interface javax.ws.rs.ApplicationPath
annotation.annotationType() => interface javax.ws.rs.ApplicationPath
Same?! but does not work. Different class loaders? How to fix it?
PS. I checked that annotationType.isAssignableFrom(annotationType) returns true.
Hi Krystian,
this really looks like some ClassLoader problem. Try to find out if there are more than one JAX-RS API artifacts on the classpath. I would start with maven-dependency-plugin, i.e. mvn dependency:tree
. Note that shaded artifacts can contain those API classes as well.