Details
Description
Hey folks.
We found a weird behavior while running MVC specification(JSR 371) on TomEE witch CXF. We have a ContainerRequestFilter defined called JaxRsContextFilter
@PreMatching @Priority(0) public class JaxRsContextFilter implements ContainerRequestFilter { @Inject private JaxRsContextProducer jaxRsContextProducer; @Context private Configuration configuration; @Context private HttpServletRequest request; @Context private HttpServletResponse response; public JaxRsContextFilter() { } public void filter(ContainerRequestContext requestContext) throws IOException { this.jaxRsContextProducer.populate(this.configuration, this.request, this.response); } }
You can see that we have a JaxRsContextProducer annotated to be injected as a field in our object but when JAXRSUtils is called to run the the container filters it injects the fields annotated as @Context , not the fields annotated with @Inject.
for (ProviderInfo<ContainerRequestFilter> filter : containerFilters) { try { InjectionUtils.injectContexts(filter.getProvider(), filter, m); filter.getProvider().filter(context); } catch (IOException ex) { throw ExceptionUtils.toInternalServerErrorException(ex, null); }
It causes our filter(JaxRsContextFilter) to throw a NullPointerException when filtering the request because it uses the producer to perform some actions in this operation.
I believe this field should be injected as well, not only the @Context fields.