Null Pointer Exception with JSTL format tag
jupallis Oct 6, 2008 2:29 PMPortal: JBoss 2.6.6 GA with JBoss AS 4.2.3.
NPE while trying to use the JSTL fmt:message tag.
Please find the stack trace below: 18:58:46,984 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apache.taglibs.standard.tag.common.fmt.BundleSupport.findMatch(BundleSupport.java:250) at org.apache.taglibs.standard.tag.common.fmt.BundleSupport.getLocalizationContext(BundleSupport.java:186) at org.apache.taglibs.standard.tag.common.fmt.BundleSupport.doStartTag(BundleSupport.java:95) at org.apache.jsp.layouts.autodesk._2column_jsp._jspx_meth_fmt_005fbundle_005f0(_2column_jsp.java:563) at org.apache.jsp.layouts.autodesk._2column_jsp._jspService(_2column_jsp.java:180) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
When we look at the code for the BundleSupport.findMatch()
243 private static LocalizationContext findMatch(PageContext pageContext, 244 String basename) { 245 LocalizationContext locCtxt = null; 246 247 // Determine locale from client's browser settings. 248 249 for (Enumeration enum_ = Util.getRequestLocales((HttpServletRequest )pageContext.getRequest()); 250 enum_.hasMoreElements(); ) { // <-- Line no 250. 251 Locale pref = (Locale ) enum_.nextElement(); 252 ResourceBundle match = findMatch(basename, pref);
Enumeration enum_ is being returned as null as part of the method call Util.getRequestLocales().
if we look at the code for Util.getRequestLocales()
280 Enumeration values = request.getHeaders("accept-language"); 281 if (values.hasMoreElements()) { 282 // At least one "accept-language". Simply return 283 // the enumeration returned by request.getLocales(). 284 // System.out.println("At least one accept-language"); 285 return request.getLocales(); 286 } else { 287 // No header for "accept-language". Simply return 288 // the empty enumeration. 289 // System.out.println("No accept-language"); 290 return values;
In the above code though the NPE problem at Ln.no 280 has been fixed still the reqeust.getLocales() is returning null and the JSTL tag is ending up with the NPE.