cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ezequiel Rosas Garcia (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-7248) JAX-RS @Context injected fields cause a NPE in re-used providers from OSGI
Date Sat, 11 Feb 2017 21:02:41 GMT
Ezequiel Rosas Garcia created CXF-7248:
------------------------------------------

             Summary: JAX-RS @Context injected fields cause a NPE in re-used providers from
OSGI
                 Key: CXF-7248
                 URL: https://issues.apache.org/jira/browse/CXF-7248
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS
    Affects Versions: 3.0.12, 3.1.9, 2.7.18
            Reporter: Ezequiel Rosas Garcia


Hi. 

The explanation is kind of long, but the code issue I found is simple, please look at the
linked PR. 
Most of the text will be about what I have attempted, in hopes of getting any comment on what
I'm trying to archieve:

I have a bean implementing ContainerRequestFilter that I'm obtaining through OSGI, and this
bean has a {{@Context}} injected field. All of the bundles in my application are setting this
bean as a Provider via JAXRS.

At first, the {{@Context}} annotation was used directly on the field of the implementing class.
This caused the injection to fail on all bundles trying to use it, because it seems the imported
object via osgi was a Proxy rather than the actual original bean that was exported. CXF attempted
to look for any field to inject, but the Proxy never exposed anything of the underlying object.

The next attempt was putting the {{@Context}} annotation on the setter method in a new interface
the filter is now implementing.
Now, the first bundle works properly, but then fails as described in the title of this issue:
After the second bundle is deployed, trying to call any method of the injected field when
handling the first endpoint (from the first bundle) will throw an NPE (the field itself isn't
null tho)

Digging through the code, I can see that a ThreadLocal proxy in combination with a map are
being used for the injection. 
And that each endpoint can re use the same ThreadLocal proxy as long as CXF can retrieve it
from the provider bean.

Finally, I added a getter method for the injected field, but the problem persisted. The linked
PR fixes InjectionUtils#getGetterFromSetter so this problem goes away.
I wanted to also ask. Is this a good approach for reusing the filter through OSGI?

Test: https://github.com/nhtzr/osgiee-web/blob/master/src/test/java/mx/nhtzr/osgiee/web/internal/MyFilterTest.java
PR: https://github.com/apache/cxf/pull/235



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message