Подтвердить что ты не робот

Cant доступ к java.util.HashMap $Запись с модификаторами "public final"

Моя проблема заключается в том, что мое приложение работает нормально на локальном сервере Tomcat, но выдает ошибки на сервере с установленной стеклянной платой. Вся проблема в том, что я итеративно просматриваю HashMap в JSTL. Сервер бросает стек, как показано ниже:

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) 

проблема вызвана кодом:

<c:forEach items="${element.getPreparedParameters()}" var="parametr" varStatus="j">
    documents["${i.index}"]["param"]=new Array();
    documents["${i.index}"]["param"]["key"] = "${parametr.getKey()}";
    documents["${i.index}"]["param"]["value"] = "${parametr.getValue()}";
</c:forEach>

Где element.getPreparedParameters() возвращает HashMap.

Как я могу заставить его работать?

4b9b3361

Ответ 1

Откажитесь от этой многолетней ошибки, сообщенной Sun против Java 1.2. Я помню, что раньше видел эту ошибку, и сообщение вводит в заблуждение: проблема связана не с модификаторами метода, а с модификаторами класса-владельца. А именно, Map.Entry является открытым интерфейсом, но реализующий класс в HashMap является закрытым. Отражение не позволяет вам обращаться к методам класса, даже если вы обращаетесь к методам, реализующим открытый интерфейс.

Я предлагаю пойти по дешевому обходному пути: не перебирать по entrySet, а над keySet и использовать map.get(key) вместо entry.getValue().