【问题标题】:Reflection is not allowed on private Throwable私有 Throwable 上不允许反射
【发布时间】:2012-02-29 00:16:42
【问题描述】:

我正在使用带有 Spring 的应用引擎,但出现以下异常:

java.lang.SecurityException:java.lang.IllegalAccessException: 私有 java.lang.Throwable 上不允许反射

当使用 ResponseBody 序列化控制器的结果时会发生这种情况:

@RequestMapping("/mapping")
public @ResponseBody
Response handleRequest(Request request) {

Response 对象有一个私有 Throwable 及其 getter 和 setter。

为什么gae不能反思?

【问题讨论】:

    标签: java spring google-app-engine


    【解决方案1】:

    首先,安全例外是沙盒限制。沙盒类通常不允许使用反射来访问另一个类的私有成员。 (有充分的理由)。据推测,GAE 本身要么是沙盒化的,要么是对你的类进行沙盒化的。

    那么为什么会发生这种情况当你有私有字段的 getter 和 setter 时

    我的猜测是 getter 和/或 setter 方法的签名与私有字段的名称和类型不完全匹配。或者它们可能无法访问。检查那些。如果这没有帮助,请尝试将私有 Throwable 字段公开 (ick) 作为实验。

    【讨论】:

    • 在序列化 Response 时,内部字段 Throwable 被递归序列化,并且由于私有字段 'cause' 没有 setter 和 getter 而失败。发生这种情况是因为我使用的是 GSON 序列化程序。
    【解决方案2】:

    您必须将字段设为受保护或公开,才能将它们与 GAE 上的反射一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2015-05-31
      • 2010-10-04
      • 2011-10-09
      • 2022-11-27
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多