2012-02-29 77 views
0

我使用的应用程序引擎和春天,我得到以下异常:反射不允许私人的Throwable

java.lang.SecurityException异常:java.lang.IllegalAccessException: 反射不允许私人的java.lang.Throwable

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

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

Response对象有一个私有的Throwable,它的getter和setter。

为什么不能反思呢?

回答

1

首先,安全异常是沙盒限制。沙盒类通常不允许使用反射来访问另一个类的私有成员。 (有充分的理由)。据推测,GAE要么是自己的沙箱,要么就是沙盒。

那么为什么会发生这种情况当你有私人领域的获得者和设置者

我的猜测是getter和/或setter方法的签名并不完全匹配专用字段的名称和类型。或者也许他们无法访问。检查这些。如果这没有帮助,请尝试将公共专用Throwable字段作为实验进行公开(ick)。

+0

序列化Response时,内部字段Throwable被递归序列化,并失败,因为私有字段'cause'没有setter和getter。发生这种情况是因为我使用了GSON串行器。 – 2012-02-29 09:41:58

0

你必须让领域被保护或公开使用GAE反射。