无法访问带有修饰符“public final”的java.util.HashMap $ Entry
我的问题是,我的应用程序在Tomcat服务器上本地运行良好,但在安装了glassfish的服务器上抛出错误。 整个问题是我在JSTL中通过HashMap进行迭代。 服务器抛出如下堆栈:
Servlet.service() for servlet jsp threw exception java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.HashMap$Entry with modifiers "public final" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95) at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261) at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)
问题是由代码引起的:
documents["${i.index}"]["param"]=new Array(); documents["${i.index}"]["param"]["key"] = "${parametr.getKey()}"; documents["${i.index}"]["param"]["value"] = "${parametr.getValue()}";
其中element.getPreparedParameters()
返回HashMap
。
我怎样才能让它发挥作用?
查看Sun针对Java 1.2报告的这个几十年前的错误 。 我记得之前看到过这个错误并且消息有误导性:问题不在于方法修饰符,而在于拥有类的修饰符。 也就是说, Map.Entry
是一个公共接口,但HashMap
的实现类是私有的。 即使您正在访问实现公共接口的方法,Reflection也不允许您访问类的方法。
我建议寻找一个廉价的解决方法:不要遍历entrySet
,而是遍历keySet
并使用map.get(key)
而不是entry.getValue()
。
- Netbeans在保存时部署:它应该如何工作?
- @ Singleton,@ Start,@ PostConstruct不适用于EJB3.1和Glassfishv3.0.1
- 这里的“ org.glassfish.embedded ”存储库在哪里?
- 嵌入式GlassFish忽略Maven测试资源
- Java – 日期保存为前一天
- JAX-RS,GlassFish,Eclipse。 简单的Web服务不起作用
- SimpleFormatter忽略java.util.logging.SimpleFormatter.format属性
- 带有FormDataContentDisposition的org.glassfish.jersey上传文件
- Glassfish 3安全性 – 使用JDBC Realm进行基于表单的身份validation