2013-11-21 5 views
0

Я использую Джерси 2.3.1, и у меня есть калькулятор исключений ниже.Джерси 2.0 Инъекция HttpServletRequest в ExceptionMapper

@Provider  
public class CustomExceptionMapper implements ExceptionMapper<Throwable> { 
    @Context 
    private HttpServletRequest reqeust; 
    @Override 
    public Response toResponse(Throwable t) { 
.... 
} 
} 

Когда приложение запускает это, выдается ниже исключения, указывающее, что CustomExceptionMapper не находится в запросе.

Тот же код работал отлично с Джерси 1.8, но когда я перешел на 2.3.1, он не работает.

java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.exception.CustomExceptionMapper errors were found 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:243) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:328) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:57) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:53) 
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860) 
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) 
    at java.util.AbstractCollection.addAll(AbstractCollection.java:305) 
    at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152) 
    at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:292) 
    at org.glassfish.jersey.internal.inject.Providers.getClasses(Providers.java:337) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:324) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:214) 
    at org.glassfish.jersey.internal.ExceptionMapperFactory.<init>(ExceptionMapperFactory.java:158) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1092) 
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:261) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:336) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:560) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) 
    at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:792) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:801) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:874) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:866) 
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:485) 
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162) 
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:287) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:284) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:298) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
MultiException stack 3 of 4 
java.lang.IllegalStateException: Unable to perform operation: resolve on com.exception.CustomExceptionMapper 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:57) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:53) 
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860) 
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) 
    at java.util.AbstractCollection.addAll(AbstractCollection.java:305) 
    at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152) 
    at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:292) 
    at org.glassfish.jersey.internal.inject.Providers.getClasses(Providers.java:337) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:324) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:214) 
    at org.glassfish.jersey.internal.ExceptionMapperFactory.<init>(ExceptionMapperFactory.java:158) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1092) 
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:261) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:336) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:560) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) 
    at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:792) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:801) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:874) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:866) 
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:485) 
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162) 
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:287) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:284) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:298) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
MultiException stack 4 of 4 
java.lang.IllegalStateException: Unable to perform operation: create on org.glassfish.jersey.internal.ExceptionMapperFactory 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:560) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) 
    at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:792) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:801) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:874) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:866) 
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:485) 
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162) 
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:287) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:284) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:298) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
Nov 21, 2013 11:07:37 AM org.apache.catalina.core.StandardContext loadOnStartup 
SEVERE: Servlet /jerseyNew threw load() exception 
java.lang.IllegalStateException: Not inside a request scope. 
    at com.google.common.base.Preconditions.checkState(Preconditions.java:149) 
    at org.glassfish.jersey.process.internal.RequestScope.current(RequestScope.java:226) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:154) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:590) 
    at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:88) 
    at org.glassfish.jersey.internal.inject.ReferencingFactory.provide(ReferencingFactory.java:101) 
    at org.jvnet.hk2.internal.FactoryCreator.create(FactoryCreator.java:96) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:69) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 
    at org.glassfish.jersey.internal.inject.ContextInjectionResolver.resolve(ContextInjectionResolver.java:104) 
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:208) 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:231) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:328) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:57) 
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:53) 
    at com.google.common.collect.Iterators$8.transform(Iterators.java:860) 
    at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) 
    at java.util.AbstractCollection.addAll(AbstractCollection.java:305) 
    at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152) 
    at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:292) 
    at org.glassfish.jersey.internal.inject.Providers.getClasses(Providers.java:337) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:324) 
    at org.glassfish.jersey.internal.inject.Providers.getAllProviders(Providers.java:214) 
    at org.glassfish.jersey.internal.ExceptionMapperFactory.<init>(ExceptionMapperFactory.java:158) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1092) 
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:261) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:336) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:560) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77) 
    at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:792) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:801) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:874) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:866) 
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:485) 
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:162) 
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:287) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289) 
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:284) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:298) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 

Я немного борюсь с этим, любая помощь будет высоко оценена.

ответ

1

Попробуйте использовать более новую версию Джерси (последняя версия - 2.4.1). Этот выпуск (JERSEY-1960) был исправлен в 2.4. Если это не работает для вас, вы можете использовать обходной путь (после подачи вопроса на наш JIRA):

@Inject 
private java.inject.Provider<org.glassfish.jersey.internal.util.collection.Ref<HttpServletRequest>> request; 
+0

Спасибо много Михала, ваш обходной путь работал хорошо, я постараюсь использовать последнюю версию и посмотреть как это происходит – Kalai

+1

Я протестировал его, в последней версии (2.4.1) он отлично работал без обхода. – Kalai

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