users@jersey.java.net

Re: NPE On Jersey 1.1.5 Final, ResourceClass.java

From: Erdinc Yilmazel <erdinc_at_yilmazel.com>
Date: Fri, 22 Jan 2010 17:58:26 +0000

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
>