users@jersey.java.net

RE: [Jersey] Object injection

From: Li, Jun <jun.li_at_credit-suisse.com>
Date: Fri, 1 Aug 2008 15:53:49 -0400

Never mind. I figured it out @Provider.

-----Original Message-----
From: Li, Jun
Sent: Friday, August 01, 2008 3:37 PM
To: users_at_jersey.dev.java.net
Subject: RE: [Jersey] Object injection

Hi Paul,

How can I add the InjectableProvider?
I can not find a way to get the ResourceConfig, I plan to put it in the
init method of session filter.

And I get the following error:
com.sun.jersey.api.container.ContainerException: Exception injecting
parameters to dynamic resolving method
        at
com.sun.jersey.impl.uri.rules.SubLocatorRule.invokeSubLocator(SubLocator
Rule.java:118)
        at
com.sun.jersey.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:
74)
        at
com.sun.jersey.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule
.java:111)
        at
com.sun.jersey.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:
87)
        at
com.sun.jersey.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule
.java:111)
        at
com.sun.jersey.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule
.java:71)
        at
com.sun.jersey.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule
.java:111)
        at
com.sun.jersey.impl.uri.rules.RootResourceClassesRule.accept(RootResourc
eClassesRule.java:64)
        at
com.sun.jersey.impl.application.WebApplicationImpl.handleRequest(WebAppl
icationImpl.java:669)
        at
com.sun.jersey.impl.application.WebApplicationImpl.handleRequest(WebAppl
icationImpl.java:631)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletCon
tainer.java:291)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
        at
com.sun.jersey.spi.spring.container.servlet.SpringServlet.service(Spring
Servlet.java:173)
        at
org.apache.catalina.core.ApplicationFilterChain.servletService(Applicati
onFilterChain.java:411)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:317)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:198)
        at
com.cs.holt.ws.util.SessionFilter.doFilter(SessionFilter.java:58)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:230)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:198)
        at
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFi
lter.java:390)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:230)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:198)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:288)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:271)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:202)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:577)
        at
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:206)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
71)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:150)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:632)
        at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
:577)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
71)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdap
ter(DefaultProcessorTask.java:637)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(
DefaultProcessorTask.java:568)
        at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(De
faultProcessorTask.java:813)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcesso
rTask(DefaultReadTask.java:341)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultR
eadTask.java:263)
        at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultR
eadTask.java:214)
        at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(Po
rtUnificationPipeline.java:380)
        at
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWork
erThread.java:106)
Caused by: java.lang.NullPointerException
        at
com.sun.jersey.impl.uri.rules.SubLocatorRule.invokeSubLocator(SubLocator
Rule.java:102)
        ... 47 more

Thanks,
Jun

-----Original Message-----
From: Paul.Sandoz_at_Sun.COM [mailto:Paul.Sandoz_at_Sun.COM]
Sent: Friday, August 01, 2008 11:28 AM
To: users_at_jersey.dev.java.net
Subject: Re: [Jersey] Object injection

Li, Jun wrote:
> Actually I realized this doesn't buy us anything.
> Currently we just need call a static method call with id as parameter
> whenever we need the object.
> It really will be nice if we can inject the object to the needed
> methods like @HeaderParam.
>

You can do that with InjectableProvider. See previous emails on the
list:

http://markmail.org/search/?q=list%3Anet.java.dev.jersey.users+Injectabl
eProvider#query:list%3Anet.java.dev.jersey.users%20InjectableProvider%20
order%3Adate-backward+page:1+state:facets

Paul.

> TIA,
> Jun
>
> -----Original Message-----
> From: Marc.Hadley_at_Sun.COM [mailto:Marc.Hadley_at_Sun.COM]
> Sent: Thursday, July 31, 2008 5:33 PM
> To: users_at_jersey.dev.java.net
> Subject: Re: [Jersey] Object injection
>
> On Jul 31, 2008, at 5:24 PM, Grazi, Victor wrote:
>
>> Is there any way to access the context directly via injection?
>> It would be great if we could have an annotation for assigning a
>> context property
>
> You can inject ServletConfig, ServletContext, HttpServletRequest and
> HttpServletResponse. So, e.g. if you want to get an object stored in
> the servlet request by a filter you can write something like:
>
> @Path(...)
> public class MyResource {
>
> public MyResource(@Context HttpServletRequest request) {
> Object o = request.getAttribute(...)
> ...
> }
>
> ...
> }
>
> HTH,
> Marc.
>
>> Thanks, Victor
>>
>> -----Original Message-----
>> From: Li, Jun
>> Sent: Thursday, July 31, 2008 5:19 PM
>> To: users_at_jersey.dev.java.net
>> Subject: RE: [Jersey] Object injection
>>
>> Great! We plan to create a resource base class for all the resources.
>> Thanks,
>>
>> Jun
>>
>> -----Original Message-----
>> From: Marc.Hadley_at_Sun.COM [mailto:Marc.Hadley_at_Sun.COM]
>> Sent: Thursday, July 31, 2008 5:00 PM
>> To: users_at_jersey.dev.java.net
>> Subject: Re: [Jersey] Object injection
>>
>> Assuming you are using Servlets and the default per-request resource
>> class lifecycle, then the filter could put the object in the servlet
>> context and the resource class could extract it in its constructor.
>>
>> Marc.
>>
>> On Jul 31, 2008, at 3:47 PM, Li, Jun wrote:
>>
>>> Hi,
>>>
>>> I just wondering if there is a way to inject a object for all the
>>> GET/PUT/POST/DELETE methods.
>>> Basically, I have a session filter which extracts an id in the
>>> header, then I construct a object based on the id.
>>> And I'd like to pass the object to all the methods in the resources,

>>> so I don't need to have the exactly same code (although it is just
>>> one
>>> line) in each methods.
>>>
>>> Any suggestion?
>>>
>>> Thanks,
>>> Jun
>>>
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> = Please access the attached hyperlink for an important electronic
>>> communications disclaimer:
>>>
>>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> =
>>>
>> ---
>> Marc Hadley <marc.hadley at sun.com>
>> CTO Office, Sun Microsystems.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>>
>> =
>> =
>> =====================================================================
>> =
>> ======
>> Please access the attached hyperlink for an important electronic
>> communications disclaimer:
>>
>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>> =
>> =
>> =====================================================================
>> =
>> ======
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> = Please access the attached hyperlink for an important electronic
>> communications disclaimer:
>>
>> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> =
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>
> ---
> Marc Hadley <marc.hadley at sun.com>
> CTO Office, Sun Microsystems.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
>
>
> ======================================================================
> ======== Please access the attached hyperlink for an important
> electronic communications disclaimer:
>
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ======================================================================
> ========
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>

-- 
| ? + ? = To question
----------------\
    Paul Sandoz
         x38109
+33-4-76188109
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
For additional commands, e-mail: users-help_at_jersey.dev.java.net
========================================================================
======
Please access the attached hyperlink for an important electronic
communications disclaimer: 
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
========================================================================
======
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
For additional commands, e-mail: users-help_at_jersey.dev.java.net
==============================================================================
Please access the attached hyperlink for an important electronic communications disclaimer: 
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
==============================================================================