2013-05-03 2 views
1

pom.xml:PreProcessInterceptor не перехватывать некоторые из моих JAX-RS услуг ресурсов

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>jaxrs-api</artifactId> 
    <version>2.3.1.GA</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jaxrs</artifactId> 
    <version>2.3.1.GA</version> 
</dependency> 

Класс перехватчик:

@Provider 
@ServerInterceptor 
@SecurityPrecedence 
public class AuthorizationInterceptor implements PreProcessInterceptor { 
    @Override 
    public ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws Failure, WebApplicationException { 
     // some initalizations 
    } 
} 

Веб-сервис не перехватывается:

@Path("/poi") 
@Consumes({"application/xml", "application/json", "application/octet-stream"}) 
@Produces({"application/json", "text/json", "application/xml"}) 
@Restricted 
public class PoiResource extends SecureResource<Poi> { 

    @Inject 
    public PoiRessource(PoiDao pois) { 
     super(pois); 
    } 

    @GET 
    @Path("/ping") 
    @UnRestricted 
    public Response ping() { 
     String date = new Date().toString(); 
     if (log.isInfoEnabled()) log.info(String.format("Ping %s",date)); 
      return Response.ok(date).build(); 
    } 
} 

Перехват веб-службы:

@Path("/access") 
@Consumes({"application/xml", "application/json", "application/octet-stream", "application/x-www-form-urlencoded"}) 
@Produces({"application/json", "text/json", "application/xml"}) 
@Restricted 
public class AccessResource extends SecureResource<Access> { 

    @Inject 
    public AccessResource(AccessDao accessDao) { 
     super(accessDao); 
    } 

    @GET 
    @Path("/ping") 
    @UnRestricted 
    public Response ping() { 
     String date = new Date().toString(); 
     if (log.isInfoEnabled()) log.info(String.format("Ping %s",date)); 
      return Response.ok(date).build(); 
    } 
} 

я получаю исключение, когда я звоню службу пинг на PoiResource:

2013-05-03 18:34:09.973 [http-9080-3] ERROR c.c.a.r.p.exception.ExceptionMapper - 
com.google.inject.ProvisionException: Guice provision errors: 

1) Error injecting constructor, java.lang.NullPointerException 
at com.connecthings.adtag.common.dao.PoiDao.<init>(PoiDao.java:69) 
while locating com.connecthings.adtag.common.dao.PoiDao 
for parameter 0 at com.connecthings.adtag.poi.rest.PoiRessource.<init>(PoiRessource.java:98) 
while locating com.connecthings.adtag.poi.rest.PoiRessource 

1 error 
    at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987) ~[guice-3.0.jar:na] 
    at com.connecthings.adtag.common.inject.ConfigurableRestEasyGuiceListener$1.createResource(ConfigurableRestEasyGuiceListener.java:104) ~[common-inject-4.0.0-SNAPSHOT.jar:na] 
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:210) ~[resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.1.GA.jar:na] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) [servlet-api.jar:na] 
    at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263) [guice-servlet-3.0.jar:na] 
    at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178) [guice-servlet-3.0.jar:na] 
    at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) [guice-servlet-3.0.jar:na] 
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62) [guice-servlet-3.0.jar:na] 
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) [guice-servlet-3.0.jar:na] 
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) [guice-servlet-3.0.jar:na] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) [catalina.jar:6.0.35] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:6.0.35] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) [catalina.jar:6.0.35] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [catalina.jar:6.0.35] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [catalina.jar:6.0.35] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [catalina.jar:6.0.35] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina.jar:6.0.35] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) [catalina.jar:6.0.35] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) [tomcat-coyote.jar:6.0.35] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) [tomcat-coyote.jar:6.0.35] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) [tomcat-coyote.jar:6.0.35] 
    at java.lang.Thread.run(Thread.java:679) [na:1.6.0_27] 
Caused by: java.lang.NullPointerException: null 
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:796) ~[na:1.6.0_27] 
    at com.mongodb.Mongo.getDB(Mongo.java:362) ~[mongo-java-driver-2.10.1.jar:na] 
    at com.google.code.morphia.DatastoreImpl.<init>(DatastoreImpl.java:77) ~[morphia-0.99.jar:na] 
    at com.google.code.morphia.DatastoreImpl.<init>(DatastoreImpl.java:88) ~[morphia-0.99.jar:na] 
    at com.connecthings.adtag.model.dao.UnsecureGenericDao.getDs(UnsecureGenericDao.java:74) ~[common-persistence-4.0.0-SNAPSHOT.jar:na] 
    at com.connecthings.adtag.model.dao.UnsecureGenericDao.getCollection(UnsecureGenericDao.java:112) ~[common-persistence-4.0.0-SNAPSHOT.jar:na] 
    at com.connecthings.adtag.common.dao.PoiDao.<init>(PoiDao.java:73) ~[common-dao-4.0.0-SNAPSHOT.jar:na] 
    at com.connecthings.adtag.common.dao.PoiDao$$FastClassByGuice$$3bbdc31e.newInstance(<generated>) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:60) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) ~[guice-3.0.jar:na] 
    at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974) ~[guice-3.0.jar:na] 
    ... 27 common frames omitted 

Я не могу выяснить, почему метод пинг AccessResource перехватывается и метод пинг PoiResource не ... Исключение выбрано потому, что poi dao нужен объект, инициализированный в методе перехватчика для instanciation.

Если у кого-нибудь есть подсказка для меня, это очень поможет. Спасибо!

ответ

1

Ваше исключение указывает на то, что проблема исходит от конструктора PoiDao, который предотвращает сбор PoiResource.

В режиме resteasy метод перехватчика вызывается после инициализации ресурса и вызова метода ресурса.

Поскольку ваш ресурс не может быть создан, таким образом, перехватчик никогда не называется.

+0

Я считал, что инстанцирование даос произошло после перехвата, а конструктор PoiDao зависел от объекта, инициализированного в перехватчике. Я модифицировал конструктор PoiDao, как вы предлагаете, чтобы сделать его независимым, теперь он работает лучше. Спасибо! – pauline

Смежные вопросы