java ee - JAX-RS: Custom class object no injected into a ContainerRequestFilter -
i've created containerrequestfilter
implementation this:
@provider @prematching @secured @dependent public class bearerfilter implements containerrequestfilter { @inject protected memcachedapplicationresources memcachedresources; @override public void filter(containerrequestcontext requestcontext) throws ioexception { //this.memcachedresources null here. } }
as can see i'm trying inject memcachedapplicationresources
object memcachedresources
field.
memcachedapplicationresources
like:
@applicationscoped public class memcachedapplicationresources {}
why null
?
edit
i've created beans.xml
file content:
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> </beans>
however, it's still null
.
edit 2
i've tried create filter
instead of containerrequestfilter
:
@webfilter( dispatchertypes = {dispatchertype.request }, urlpatterns = { "/cmng/*" }, initparams = { @webinitparam(name = "excludedpaths", value = "log") } ) public class bearerwebfilter implements filter { @inject protected memcachedresources memcachedresources; public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception { //here, this.memcachedresources injected proxy! } }
why using filter
class field injected?
the injection should work if:
- you have
beans.xml
file underweb-inf
(not mandatory cdi 1.2). - your filter bean managed cdi.
depending on container, may require dependency make cdi works resteasy, should work out-of-the-box wildfly. see documentation more details.
if doesn't work, still can try instance programmaticaly using:
memcachedapplicationresources bean = cdi.current().select(memcachedapplicationresources.class).get();
Comments
Post a Comment