【问题标题】:App Engine: Reflection is not allowed on private java.lang.Throwable java.lang.Throwable.causeApp Engine:私有 java.lang.Throwable java.lang.Throwable.cause 上不允许反射
【发布时间】:2012-12-31 05:51:08
【问题描述】:

今天我将自己创建的 Java 应用程序部署到 Google App Engine,但遇到了一些非常无用的错误消息。

Invocation of init method failed; nested exception is java.lang.SecurityException:
java.lang.IllegalAccessException: Reflection is not allowed on private 
java.lang.Throwable java.lang.Throwable.cause

后面是一个没有提到我的任何类的堆栈跟踪:我的代码中没有一行我可以指出导致这种情况。

此应用程序使用 Objectify 和 Spring MVC,在我的本地开发服务器(App Engine 版本 1.7.4)上运行良好。

我已经检查了我的代码,并从我使用的任何异常类中删除了任何提及“原因”的内容。我仍然有这个问题。此外,我的控制器只能抛出一种类型的异常,这同样没有提及原因。

有什么想法吗?

附:我找到了this discussion,但信息量不是很大。

【问题讨论】:

  • 是否可以捕获异常?如果没有,请查看是否可以使用 Thread.setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler) 来捕获该异常并进行更多分析。

标签: java google-app-engine spring-mvc


【解决方案1】:

万一其他人遇到类似问题,他们与在 appengine 服务器上运行时在沙盒安全限制下运行的代码有关,但在本地开发服务器上运行时没有此类限制。

沙盒限制不允许对私有变量进行反射。

就我而言,我使用 Gson 进行序列化,它以难以调试的方式大量使用反射。我仍然不知道它在哪里或为什么试图对它在堆栈跟踪中谈到的 Throwable 事物进行反射。无论如何,当我改用 Jackson 时,我所有的问题都消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2010-11-17
    • 2013-08-14
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多