当我在我的JSP文件中遇到NullpointerException时,它全部开始。该生产线导致它只有一个Struts 1.3标签: <html:html>
可能损坏的java.util.Locale导致NullPointerException
从堆栈跟踪的根本原因是这样的:
java.lang.NullPointerException
java.util.Locale.toString(Unknown Source)
org.apache.el.lang.ELSupport.coerceToString(ELSupport.java:377)
org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:407)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:188)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
org.apache.jsp.search_jsp._jspService(search_jsp.java:193)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.servlets.ShowAllJobsServ.doGet(ShowAllJobsServ.java:82)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
我开始我的研究,结果发现,从Struts会话获取一个Locale对象,以支持i82n功能。然后我想:也许在会话中没有Locale,毕竟我还没有使用该功能。我会测试对象为null。所以我写道:
${empty sessionScope["org.apache.struts.action.LOCALE"]}
和它打印false
。
我从同一个对象调用了其他方法,包括getCountry,getLanguage和hashCode。所有导致NullPointerException。我唯一可以成功调用的是getClass。我现在很困惑。
我唯一的猜测是,不知何故Locale对象没有正确反序列化。我必须说我正在使用MemcachedSessionManager将Tomcat会话存储在Memcached服务器中,成功存储基本Bean以及从Hibernate取得的集合。
如果这并不够奇怪,它可以在我的机器上运行,并且只会在我将应用程序部署到Windows Azure上时造成混乱。
任何线索?它甚至有什么意义?