Java 不允许在私人可丢弃设备上进行反射

Java 不允许在私人可丢弃设备上进行反射,java,spring,google-app-engine,Java,Spring,Google App Engine,我将应用程序引擎与Spring一起使用,出现以下异常: java.lang.SecurityException:java.lang.IllegalAccessException: 私有java.lang.Throwable上不允许反射 使用ResponseBy序列化控制器的结果时会发生这种情况: @RequestMapping("/mapping") public @ResponseBody Response handleRequest(Request request) { 响应对象有一个带有

我将应用程序引擎与Spring一起使用,出现以下异常:

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

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

@RequestMapping("/mapping")
public @ResponseBody
Response handleRequest(Request request) {
响应对象有一个带有getter和setter的私有Throwable


为什么gae不能对此进行反思?

首先,安全异常是沙箱限制。沙盒类通常不允许使用反射来访问另一个类的私有成员。(理由充分)。大概GAE本身就是沙箱,或者是沙箱化您的类

那么,当你在私人领域有了接受者和接受者时,为什么会发生这种情况呢


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

您必须将字段设置为protected或public,以便在GAE上使用它们进行反射。

序列化响应时,内部字段Throwable被递归序列化,它失败了,因为私有字段“cause”没有setter和getter。这是因为我使用的是GSON序列化程序。