Ok, I think I narrowed the problem and I am a bit closer to solution. I am
using a class which extends
com.sun.jersey.spi.container.servlet.ServletContainer as a servlet filter to
make Guice integration possible, (Using modified code from jersey-guice
package). In the same class I am also registering a ResourceFilterFactory
and an InjectableProvider.
I am doing this by the following code in the void configure(WebConfig wc,
ResourceConfig rc, WebApplication wa) method:
@Override
protected void configure(WebConfig wc, ResourceConfig rc, WebApplication
wa) {
super.configure(wc, rc, wa);
rc.getSingletons().add(new LoginResourceFilterFactory());
rc.getSingletons().add(new SessionDataProvider());
}
This was working fine in previous versions of Jersey, but now It is causing
a NullPointerException that is described in my previous email. When I don't
override the method above, everything works fine including guice
integration. The ResourceFilterFactory that is causing the problem is
something like this:
import com.sun.jersey.api.model.AbstractMethod;
import com.sun.jersey.spi.container.ResourceFilter;
import com.sun.jersey.spi.container.ResourceFilterFactory;
import com.sun.jersey.spi.inject.Inject;
import javax.ws.rs.ext.Provider;
import java.util.ArrayList;
import java.util.List;
@Provider
public class LoginResourceFilterFactory implements ResourceFilterFactory {
@Inject
SessionHandler sessionHandler;
@Override
public List<ResourceFilter> create(AbstractMethod am) {
LoginRequired lr = am.getAnnotation(LoginRequired.class);
if (lr == null) {
lr = am.getResource().getAnnotation(LoginRequired.class);
if (lr == null) {
return null;
}
}
final LoginResourceFilter filter =
LoginResourceFilter.instance(sessionHandler, lr.value());
return new ArrayList<ResourceFilter>() {{
add(filter);
}};
}
}
Erdinc
On Fri, Jan 22, 2010 at 3:52 PM, Erdinc Yilmazel <erdinc_at_yilmazel.com>wrote:
> Hi,
>
> I'm trying to use Jersey 1.1.5 Final along with the Google Guice
> integration. I am getting a NullPointerException on ResourceClass.java..
>
>
> WARNING: failed GuiceFilter
> java.lang.NullPointerException
> at
> com.sun.jersey.server.impl.model.ResourceClass.processOptions(ResourceClass.java:374)
> at
> com.sun.jersey.server.impl.model.ResourceClass.processMethods(ResourceClass.java:323)
> at
> com.sun.jersey.server.impl.model.ResourceClass.<init>(ResourceClass.java:133)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.newResourceClass(WebApplicationImpl.java:554)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.getResourceClass(WebApplicationImpl.java:459)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.getResourceClass(WebApplicationImpl.java:481)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl$9.getInjectable(WebApplicationImpl.java:709)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl$9.getInjectable(WebApplicationImpl.java:705)
> at
> com.sun.jersey.core.spi.factory.InjectableProviderFactory.getInjectable(InjectableProviderFactory.java:202)
> at
> com.sun.jersey.core.spi.factory.InjectableProviderFactory.getInjectable(InjectableProviderFactory.java:216)
> at
> com.sun.jersey.core.spi.component.ComponentInjector.inject(ComponentInjector.java:89)
> at
> com.sun.jersey.core.spi.component.ProviderFactory.injectOnProviderInstance(ProviderFactory.java:240)
> at
> com.sun.jersey.core.spi.component.ProviderFactory.injectOnProviderInstances(ProviderFactory.java:228)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:907)
>
>
> The problem is at this method, where this.wadlFactory is null.
>
> private void processOptions(ResourceMethodMap methodMap,
> AbstractResource resource, PathPattern p) {
> List<ResourceMethod> l = methodMap.get("OPTIONS");
> if (l != null) {
> return;
> }
>
> ResourceMethod optionsMethod =
> this.wadlFactory.createWadlOptionsMethod(methodMap, resource, p);
> if (optionsMethod == null)
> optionsMethod = new ResourceHttpOptionsMethod(methodMap);
> methodMap.put(optionsMethod);
> }
>
> Any thoughts? I am currently trying to deploy my application locally using
> the Google Appengine Dev Server. Could it be something about appengine
> restrictions?
>
> Erdinc
>