[ 
https://issues.apache.org/jira/browse/CXF-6005?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrei Shakirin reassigned CXF-6005:
------------------------------------

    Assignee: Andrei Shakirin

> ResourceInfo cannot be injected in OSGi environment
> ---------------------------------------------------
>
>                 Key: CXF-6005
>                 URL: https://issues.apache.org/jira/browse/CXF-6005
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.7.12
>            Reporter: Andrei Shakirin
>            Assignee: Andrei Shakirin
>            Priority: Critical
>
> Problem: by injection of ResourceInfo in resource class or in provider in 
> OSGi environment CXF throws following exception:
> {code}
> Caused by: java.lang.IllegalArgumentException: interface 
> org.apache.cxf.jaxrs.impl.tl.ThreadLocalProxy is not visible from class loader
>       at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:487)[:1.7.0_40]
>       at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:722)[:1.7.0_40]
>       at 
> org.apache.cxf.jaxrs.utils.InjectionUtils.createThreadLocalProxy(InjectionUtils.java:962)
> {code}
> Reason of the problem: there is no dedicated thread local context for 
> ResourceInfo and CXF instantiates it using java reflection proxy in 
> InjectionUtils:
> {code}
>             return 
> (ThreadLocalProxy<T>)Proxy.newProxyInstance(type.getClassLoader(),
>                                    new Class[] {type, ThreadLocalProxy.class 
> },
>                                    new ThreadLocalInvocationHandler<T>());
> {code}
> The problem is that classloader in first argument is taken from type class, 
> but proxy have to implement two interfaces: type and ThreadLocalProxy (second 
> argument). It works fine in standalone environment, but in OSGi classloader 
> of ResourceInfo bundle doesn't know nothing about ThreadLocalProxy interface 
> in CXF JAX-RS bundle. Of course, the ThreadLocalProxy cannot be found.
> Solution: possible solution is use the classloader of current class 
> (InjectionUtils) instead of type class. As far as InjectionUtils classloader 
> knows type class as well it should work in standalone as well as in OSGi 
> environments.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to