【问题标题】:Reflection is not allowed on private static final int java.util.BitSet.ADDRESS_BITS_PER_WORD error私有静态最终 int java.util.BitSet.ADDRESS_BITS_PER_WORD 错误上不允许反射
【发布时间】:2015-10-07 13:26:27
【问题描述】:

当我使用 GAE 中的 Gson 访问数据时出现异常:

异常:java.lang.SecurityException: java.lang.IllegalAccessException:私有上不允许反射 static final int java.util.BitSet.ADDRESS_BITS_PER_WORD

我的代码是:

Gson gson = new Gson();
JsonObject jsonObject = new JsonObject();
JsonElement element = gson.toJsonTree(dspinfo1);
JsonElement element1 = gson.toJsonTree(dspbh);
jsonObject.add("xxx", element1);
jsonObject.add("xxxx", element);
out.print(jsonObject.toString());

所以请给我建议,如果可能的话,举个例子。 完整的前是:

List<DSPMaster> dpsinfo1=new ArrayList<DSPMaster>(); 
DSPMaster dspinfo1 = dspDao.getdeliveryprovider(Long.parseLong(xxxx));
response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 
Gson gson = new Gson(); JsonObject jsonObject = new JsonObject(); 
JsonElement element = gson.toJsonTree(dspinfo1);
jsonObject.add("xxxx", element); 
out.print(jsonObject.toString());

【问题讨论】:

  • 您的堆栈跟踪有点短,无法提出任何建议。
  • dspinfo1dspbh 是什么?如果您能提供一个简短但完整的示例来演示问题,以及完整的堆栈跟踪,那将非常有帮助。
  • dspinfo1 和 dspbh 是我的类对象。

标签: java json google-app-engine


【解决方案1】:

你可以试试

Field field = MyClass.class.getField("ADDRESS_BITS_PER_WORD");
field.setAccessible(true);

【讨论】:

  • 请详细说明一下。
  • 您收到 SecurityException,因为 gson 正试图通过反射访问私有字段。通过在调用 gson 之前在字段上设置可访问标志,它很可能会被允许。注意:我不确定 GAE 是否会让您致电 Field.setAccessible(true),这可能会被 SecurityManager 禁止
【解决方案2】:

您可以尝试 Jackson 您的课程,将其转换为 json 架构,然后再预编译课程。这将允许您绕过 GAE 中的反射问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2011-03-19
    • 2012-06-26
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多