java - 带有Jersey 2.1x的Google Appengine在开发服务器中工作正常,但在Appengine服务器中工作不正常

标签 java google-app-engine guice jersey-2.0 hk2

我一直在使用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/

相关文章:

java - 使用 bat 文件编辑 Deployment.properties 文件

java - Eclipse e4 产品在 Linux/Unix 上导出失败(基于插件的产品)

python - 如何在 GAE 的搜索 API 中实现自定义拼写检查

javascript - 在 Google App Engine 中使用 Google Closure 的 "compiler.jar"

google-app-engine - App Engine 1.8.2 不支持主要版本 51.0

java - 我可以使用 Guice 在方法中获取实例吗?

java - 子模块中使用的文件路径不正确

java - 在哪里可以找到 DatastoreViewerServlet - GAE?

java - 使用 Guice 将接口(interface)绑定(bind)到实现它的代理

java - 使用 Arraylist contains () 查找给定的整数是否在数组中