0

今天我去部署一个我创建的 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)上运行良好。

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

有任何想法吗?

PS 我发现了这个讨论,但信息量不是很大。

4

1 回答 1

7

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

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

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

于 2013-01-03T11:22:17.867 回答