【问题标题】:BeanELResolver error on WebsphereWebsphere 上的 BeanELResolver 错误
【发布时间】:2014-02-24 05:38:01
【问题描述】:

下面是我的控制器代码,它返回一个视图。 如果我在 Tomcat 7 上部署和运行,它的工作完美,但是在 Websphere 上部署和运行时问题仍然存在。

    @RequestMapping(value = "/review_and_confirm_travel_detail.html", method = RequestMethod.POST)
public ModelAndView confirmTravelDetails(@ModelAttribute ViewQuote  viewQuote , 
        HttpServletRequest httpServletRequest,
        HttpServletResponse httpServletResponse, Model model) throws Exception {

    ArrayList<String> stopsList = new ArrayList<String>();
    RequestBuilderUtil.getStopsRequestString(viewQuote.getStopsValuesForRequest() , stopsList , this);

    List<String > specialInputList = getSpecialInputString(viewQuote.getSpecialInputs());
    List<String> specialInputValues = getSpecialInputString(viewQuote.getSpecialInputValues());
    Map<String , String > spInputMap =getSpecialInputMap(viewQuote.getSpecialInputs(), viewQuote.getSpecialInputValues());
    ModelAndView modelAndView = new ModelAndView("review_and_confirm_travel_detail");
    modelAndView.addObject("specialInputList", specialInputList);
    modelAndView.addObject("specialInputValues", specialInputValues);
    modelAndView.addObject("specialInputMap", spInputMap);
    modelAndView.addObject("stopsList", stopsList);
    return modelAndView;
}

另外,下面是导致错误的JSP部分。

    <div class="table_review_confirm_travel_left">
    <table id= "specialInputTable"align="center" valign="top" cellpadding="3" cellspacing="0" border="0" class="td-padding1">

        <tr><td  colspan="2" style="padding-left:5px; background-color:#e1e1e1;font-weight:bold">
                Special Inputs
            </td>
        </tr>
        <core:forEach items="${specialInputMap}" var= "spInput">
        <core:if test="${!spInput.equals('')}">
        <tr><td nowrap style="padding-left: 20px;">
                ${spInput.key}
            </td>
            <td nowrap style="padding-left: 10px;">
            <input id ="specialInputName" type="hidden" name="specialInputName" value="${spInput.key}">
                <input type="text" placeholder="${spInput.value}" name="specialInputValue" onkeypress="return validateAlphaNumeric(event)">
            </td>
        </tr>
        </core:if>
    <!--    <script type="text/javascript" charset="utf-8">
        var inputName ="";
        $(function () {
            var specialInputName = document.getElementById('specialInputName');
            inputName = inputName + specialInputName.value();
        });

        </script> -->
        </core:forEach>
    </table>    
</div>

您可以查看以下行,这些是来自服务器的错误日志。:

[2/23/14 23:40:06:697 EST] 00000166 servlet E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: servlet 的服务方法之一引发了异常 [/应用程序 [CESDirect_war] 中的 WEB-INF/views/review_and_confirm_travel_detail.jsp]。异常创建:[javax.el.E​​LException:java.lang.IllegalAccessException:类 javax.el.BeanELResolver 无法访问带有修饰符“public”的类 java.util.MapEntry 的成员 在 javax.el.BeanELResolver.invoke(BeanELResolver.java:480) 在 javax.el.CompositeELResolver.invoke(CompositeELResolver.java:137) 在 org.apache.el.parser.AstValue.getValue(AstValue.java:162) 在 org.apache.el.parser.AstNot.getValue(AstNot.java:44) 在 org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:283) 在 org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:778) 在 com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_6(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:565) 在 com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_forEach_1(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:613) 在 com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_5(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:657) 在 com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_form_form_0(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:952) 在 com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspService(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:267) 在 com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:99) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456) 在 com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 在 com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122) 在 com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:216) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032) 在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384) 在 com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:193) 在 org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 在 org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 在 org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456) 在 com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 在 com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032) 在 com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 在 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895) 在 com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 在 com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) 在 com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283) 在 com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 在 com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 在 com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 在 com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 在 com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1814) 原因:java.lang.IllegalAccessException:类 javax.el.BeanELResolver 无法访问带有修饰符“public”的类 java.util.MapEntry 的成员 在 sun.reflect.Reflection.ensureMemberAccess(Reflection.java:77) 在 java.lang.reflect.Method.invoke(Method.java:602) 在 javax.el.BeanELResolver.invoke(BeanELResolver.java:476) ... 49 更多 ]

[2/23/14 23:40:06:701 EST] 00000166 LocalTranCoor E   WLTC0017E: Resources rolled back due to setRollbackOnly() being called.
[2/23/14 23:40:06:706 EST] 00000166 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause dispatcher: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.el.ELException: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.MapEntry with modifiers "public"
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283)
        at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
        at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1814)
Caused by: javax.el.ELException: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.MapEntry with modifiers "public"
        at javax.el.BeanELResolver.invoke(BeanELResolver.java:480)
        at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:137)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:162)
        at org.apache.el.parser.AstNot.getValue(AstNot.java:44)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:283)
        at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:778)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_6(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:565)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_forEach_1(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:613)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_5(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:657)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_form_form_0(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:952)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspService(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:267)
        at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:99)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:216)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:193)
        at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        ... 22 more
Caused by: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.MapEntry with modifiers "public"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:77)
        at java.lang.reflect.Method.invoke(Method.java:602)
        at javax.el.BeanELResolver.invoke(BeanELResolver.java:476)
        ... 49 more

[2/23/14 23:40:06:741 EST] 00000166 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[dispatcher]: javax.el.ELException: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.MapEntry with modifiers "public"
        at javax.el.BeanELResolver.invoke(BeanELResolver.java:480)
        at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:137)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:162)
        at org.apache.el.parser.AstNot.getValue(AstNot.java:44)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:283)
        at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:778)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_6(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:565)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_forEach_1(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:613)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_core_if_5(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:657)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspx_meth_form_form_0(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:952)
        at com.ibm._jsp._review_5F_and_5F_confirm_5F_travel_5F_detail._jspService(_review_5F_and_5F_confirm_5F_travel_5F_detail.java:267)
        at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:99)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
        at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:216)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1384)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:193)
        at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
        at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
        at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1224)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1032)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283)
        at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
        at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1814)
Caused by: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a member of class java.util.MapEntry with modifiers "public"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:77)
        at java.lang.reflect.Method.invoke(Method.java:602)
        at javax.el.BeanELResolver.invoke(BeanELResolver.java:476)
        ... 49 more

【问题讨论】:

    标签: java javascript jquery jstl


    【解决方案1】:

    我自己也遇到了一个非常相似的问题,结果证明这是 tomcat 和 websphere 的 EL 实现之间的行为差​​异。 我认为这是在抱怨(以一种不太明显的方式)它试图使用反射来访问 equals 方法的类类型不是公共类,因此反射访问控制失败。

    专门针对这个sn-p

    <core:forEach items="${specialInputMap}" var= "spInput">
     <core:if test="${!spInput.equals('')}">
    

    我认为这会将 java.util.MapEntry 类类型的对象放入 spInput 变量中,然后 ELResolver 会通过 MapEntry 类中的方法找到 equals 方法,但是当尝试调用 equals 方法时会找到 MapEntry 类不可公开访问。

    虽然不确定java.util.MapEntryclass 是什么,但看起来不像标准的sun jdk 。

    如果您更改为使用不同类型的 Map impl 来传递 jsp,您也许可以解决该问题。

    在我的情况下,我得到了一个列表,它的类类型只是包可见性并在 jsp 中调用它的大小,即&lt;c:when test="${mylist.size() == 1}"&gt;这在普通代码中会很好,因为通过 List 接口调用公共方法大小,但是Websphere 的 EL 处理器使用反射来调用包私有类上的方法并获得安全错误。我们改为返回标准 ArrayList 以解决该问题。

    看起来tomcat impl从一个类实现的接口返回方法,如果该类不是公共的,所以它更灵活一点。

    【讨论】:

      【解决方案2】:

      只是为了记录可能导致此问题的另一个原因。我在使用 jsp 时遇到了完全相同的错误消息

      ${entry.getKey()} 
      

      而不是

      ${entry.key}
      

      前者在 tomcat 实现中是可以接受的,但在 websphere 中会导致异常。

      【讨论】:

        猜你喜欢
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        相关资源
        最近更新 更多