我一直在使用Jersey v2.19和Google Appengine v1.9.22,它在本地devserver中工作正常,没有任何问题,但是当我尝试将应用程序部署到appengine时。我有多个例外
使用的框架:
AppEngine Java 1.9.22
泽西岛2.19
对象化5.1.5
Guice 3.x
摇篮
以下是我在日志中得到的异常:
org.glassfish.jersey.internal.Errors logErrors:已检测到以下警告:警告:检测到未知的HK2故障:
MultiException堆栈1之4
java.security.AccessControlException:访问被拒绝(“ java.lang.RuntimePermission”“ getClassLoader”)
在com.google.appengine.runtime.Request.process-84bc59f0ba240851(Request.java)
在java.security.AccessControlContext.checkPermission(AccessControlContext.java:382)
在java.security.AccessController.checkPermission(AccessController.java:572)
在java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
在java.lang.ClassLoader.checkClassLoaderPermission(ClassLoader.java:1606)
在java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1525)
在org.jvnet.hk2.internal.ProxyUtilities $ 1.run(ProxyUtilities.java:95)
在org.jvnet.hk2.internal.ProxyUtilities $ 1.run(ProxyUtilities.java:90)
在java.security.AccessController.doPrivileged(AccessController.java:34)
在org.jvnet.hk2.internal.ProxyUtilities.secureCreate(ProxyUtilities.java:90)
在org.jvnet.hk2.internal.ProxyUtilities.generateProxy(ProxyUtilities.java:206)
在org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2038)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)
在org.glassfish.jersey.internal.inject.ContextInjectionResolver.resolve(ContextInjectionResolver.java:126)
在org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:214)
在org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:237)
在org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360)
在org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:470)
在org.jvnet.hk2.internal.SingletonContext $ 1.compute(SingletonContext.java:82)
在org.jvnet.hk2.internal.SingletonContext $ 1.compute(SingletonContext.java:70)
在org.glassfish.hk2.utilities.cache.Cache $ OriginThreadAwareFuture $ 1.call(Cache.java:97)
在java.util.concurrent.FutureTask.run(FutureTask.java:260)
在org.glassfish.hk2.utilities.cache.Cache $ OriginThreadAwareFuture.run(Cache.java:154)
在org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
在org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:121)
在org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2065)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)
在org.glassfish.jersey.internal.inject.Providers.getAllRankedProviders(Providers.java:247)
在org.glassfish.jersey.server.ApplicationHandler.getProcessingProviders(ApplicationHandler.java:758)
在org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:536)
在org.glassfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:183)
在org.glassfish.jersey.server.ApplicationHandler $ 3.call(ApplicationHandler.java:349)
在org.glassfish.jersey.server.ApplicationHandler $ 3.call(ApplicationHandler.java:346)
在org.glassfish.jersey.internal.Errors.process(Errors.java:315)
在org.glassfish.jersey.internal.Errors.process(Errors.java:297)
在org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
在org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:346)
在org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:339)
在org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
在org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:393)
在org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
在org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
在org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
在org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
在org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
在org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
在org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
在org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
在com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:437)
在com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:444)
在com.google.tracing.CurrentContext.runInContext(CurrentContext.java:230)
在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
在com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
在com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:441)
在java.lang.Thread.run(Thread.java:745)
MultiException堆栈2之4
java.lang.IllegalArgumentException:尝试在org.glassfish.jersey.process.internal.RequestScoped范围内为javax.servlet.http.HttpServletRequest创建代理时,创建代理时发生错误
在org.jvnet.hk2.internal.ProxyUtilities.generateProxy(ProxyUtilities.java:212)
在org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2038)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105)
在org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)
在org.glassfish.jersey.internal.inject.ContextInjectionResolver.resolve(ContextInjectionResolver.java:126)
...修剪
MultiException堆栈3之4
java.lang.IllegalArgumentException:尝试解决com.app.webapp.filters.WebApiAuthFilter错误的依赖性时
MultiException堆栈4之4
java.lang.IllegalStateException:无法执行操作:在com.app.webapp.filters.WebApiAuthFilter上解析
我已经搜索了可能的修复程序,但是找不到与我的问题有关的任何内容,因此我不使用JDO或JPA,因此asm jar不兼容不是原因。
有关如何解决此问题的任何想法?
更新:
我试图找出导致此异常的原因,我有一个Filter,其中注入了HttpServletRequest,因此抛出异常,但不确定为什么。
@Provider
@WebApiAuth
public class AuthFilter implements ContainerRequestFilter {
// problem is because of injecting this
@Context
protected HttpServletRequest servletRequest;
}
最佳答案
这对您来说可能为时已晚,但是为了帮助其他人,我在尝试访问request.getRemoteAddr()时遇到了同样的问题。注入HttpServletRequest会在运行时引发此错误,并且环境变量,请求属性或标头均不包含远程地址。
https://stackoverflow.com/a/23590606/3037408
提供了一个有效的解决方案,该解决方案将'remote_addr'标头添加到jersey / jaxrs标头中。如果您需要从HttpServletRequest访问remote_addr之外的其他内容,则可以将相关数据插入标头或其他属性中,以供以后访问。
关于java - 带有Jersey 2.1x的Google Appengine在开发服务器中工作正常,但在Appengine服务器中工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354363/