1 Reply Latest reply on Oct 7, 2008 1:25 AM by jupallis

    Null Pointer Exception with JSTL format tag

    jupallis

      Portal: 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.