Hi Martin,
The code at the end of the email works fine with the latest code. As
i understand this reproduces the same kind of use of
InjectableProvider as you are using.
Paul.
import com.sun.jersey.api.core.HttpContext;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.container.WebApplication;
import com.sun.jersey.spi.container.servlet.ServletContainer;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
import com.sun.jersey.spi.service.ComponentContext;
import com.sun.jersey.spi.service.ComponentProvider.Scope;
import javax.ws.rs.core.Context;
import java.lang.reflect.Type;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
public class InjectableTestServlet extends ServletContainer {
@Path("/helloworld")
public static class HelloWorldResource {
@Context TimerType t;
@GET
@Produces("text/plain")
public String getClichedMessage() {
return "Hello World " + t.hashCode() + " " + t.getTime();
}
}
public static class TimerType {
public long getTime() {
return System.currentTimeMillis();
}
}
private TimerType t = new TimerType();
private class TimerTypeInjectable implements
InjectableProvider<Context, Type> {
public Scope getScope() {
return Scope.PerRequest;
}
public Injectable<TimerType> getInjectable(ComponentContext
ic, Context a, Type c) {
if (TimerType.class == c) {
return new Injectable<TimerType>() {
public TimerType getValue(HttpContext context) {
return t;
}
};
}
return null;
}
}
@Override
protected void initiate(ResourceConfig rc, WebApplication wa) {
rc.getProviderInstances().add(new TimerTypeInjectable());
super.initiate(rc, wa);
}
}
On Aug 11, 2008, at 11:27 AM, Paul Sandoz wrote:
> Hi Martin,
>
> Grrr... that is odd as the InjectableProvider is used extensively
> by Jersey itself.
>
> I just wrote a simple test example, with the InjectableProvider as
> inner class of a servlet that overrides the initiate method, and it
> works fine for me using the latest 0.9 SNAPSHOT build. I am taking
> the rest of the day off, but i will try and send the example to you
> either this evening or tomorrow.
>
> Paul.
>
>
> On Aug 9, 2008, at 4:34 PM, Martin Probst wrote:
>
>> Hi Paul,
>>
>>> Try this:
>>>
>>> private class SessionProvider
>>> implements InjectableProvider<Context, Type> {
>>>
>>> public Injectable<Session> getInjectable(ComponentContext ic,
>>> Context a, Type c) {
>>> if (Session.class == c) {
>>> return new Injectable<Session>() {
>>>
>>> public Session getValue(HttpContext context) {
>>> return persistence.getSession();
>>> }
>>> };
>>> } else
>>> return null;
>>> }
>>>
>>> public Scope getScope() {
>>> return Scope.PerRequest;
>>> }
>>> }
>>
>> That doesn't help either:
>>
>> java.lang.ClassCastException: java.lang.Class
>> at com.sun.jersey.impl.model.ReflectionHelper.resolveTypeVariable
>> (ReflectionHelper.java:184)
>> at com.sun.jersey.impl.model.ReflectionHelper.resolveTypeVariable
>> (ReflectionHelper.java:179)
>> at
>> com.sun.jersey.impl.application.InjectableProviderFactory.getResolved
>> Type(InjectableProviderFactory.java:157)
>> at
>> com.sun.jersey.impl.application.InjectableProviderFactory.getMetaArgu
>> ments(InjectableProviderFactory.java:137)
>> at com.sun.jersey.impl.application.InjectableProviderFactory.add
>> (InjectableProviderFactory.java:99)
>> at
>> com.sun.jersey.impl.application.InjectableProviderFactory.configure
>> (InjectableProviderFactory.java:114)
>> at com.sun.jersey.impl.application.WebApplicationImpl.initiate
>> (WebApplicationImpl.java:571)
>> at com.sun.jersey.impl.application.WebApplicationImpl.initiate
>> (WebApplicationImpl.java:478)
>> at com.sun.jersey.spi.container.servlet.ServletContainer.initiate
>> (ServletContainer.java:559)
>> at de.hpi_web.wsminer.Servlet$HibernatingServletContainer.initiate
>> (Servlet.java:69)
>> at com.sun.jersey.spi.container.servlet.ServletContainer.load
>> (ServletContainer.java:483)
>> at com.sun.jersey.spi.container.servlet.ServletContainer.init
>> (ServletContainer.java:165)
>> at de.hpi_web.wsminer.Servlet.init(Servlet.java:94)
>> at org.apache.catalina.core.StandardWrapper.loadServlet
>> (StandardWrapper.java:1172)
>> at org.apache.catalina.core.StandardWrapper.load
>> (StandardWrapper.java:992)
>> at org.apache.catalina.core.StandardContext.loadOnStartup
>> (StandardContext.java:4058)
>> at org.apache.catalina.core.StandardContext.start
>> (StandardContext.java:4371)
>> at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1045)
>> at org.apache.catalina.core.StandardHost.start(StandardHost.java:
>> 719)
>> at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1045)
>> at org.apache.catalina.core.StandardEngine.start
>> (StandardEngine.java:443)
>> at org.apache.catalina.core.StandardService.start
>> (StandardService.java:516)
>> at org.apache.catalina.core.StandardServer.start
>> (StandardServer.java:710)
>> at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
>> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
>>
>> Any ideas?
>>
>> Regards,
>> Martin
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>