0

I am trying to deploy the Duke's Bank example form the Java EE 5 tutorial on JBoss 7.1.1. I have only used (unaltered) the source, and the standard XML configuration files for deployment, part of the exercise here is to see how I might structure a JSP based project of my own.

The exception I get is as follows:

  ERROR [[jsp]] Servlet.service() for servlet jsp threw exception: java.lang.NullPointerException
    at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1858) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.apache.jsp.main_jsp._jspx_meth_f_005fview_005f0(main_jsp.java:99)
    at org.apache.jsp.main_jsp._jspService(main_jsp.java:76)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) [jbossweb-7.0.13.Final.jar:]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) [jbossweb-7.0.13.Final.jar:]
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) [jbossweb-7.0.13.Final.jar:]
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) [jbossweb-7.0.13.Final.jar:]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:397) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:636) [rt.jar:1.6.0_18]

I have not given any JBoss configuration files, the WAR's WEB-INF part looks like this:

$ jar tvf build/lib/dukebank-web.war 
     0 Sat Dec 15 22:00:12 GMT 2012 META-INF/
   123 Sat Dec 15 22:00:10 GMT 2012 META-INF/MANIFEST.MF
     0 Sat Dec 15 22:00:12 GMT 2012 WEB-INF/
  2514 Fri Dec 14 14:29:20 GMT 2012 WEB-INF/web.xml
  1348 Sat Dec 15 08:19:46 GMT 2012 WEB-INF/dukesBank.tld
  7245 Sat Dec 15 08:19:46 GMT 2012 WEB-INF/faces-config.xml
  2153 Sat Dec 15 08:19:46 GMT 2012 WEB-INF/tutorial-template.tld
     0 Sat Dec 15 22:00:12 GMT 2012 WEB-INF/classes/...

The JSP file (main.jsp) that causes this problem is:

<f:view>
    <h:form>
        <jsp:include page="/template/template.jsp"/>
        <center>
            <h3><h:outputText value="#{bundle.Welcome}"/></h3>
        </center>
    </h:form>
</f:view>

The template file it includes:

<%@ taglib uri="/WEB-INF/tutorial-template.tld" prefix="tt" %>
<%@ page errorPage="/template/errorpage.jsp" %>
<%@ include file="/template/screendefinitions.jspf" %>
<html>
<head>
<title>
  <tt:insert definition="bank" parameter="title"/>
</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body bgcolor="#ffffff">
  <tt:insert definition="bank" parameter="banner"/>
  <tt:insert definition="bank" parameter="links"/>
</body>
</html>

I will refrain from coping any more files because, as I said at the start I haven't altered any of the files I have used.

Many thanks for your help, Steve

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
Dobbo
  • 1,188
  • 3
  • 16
  • 27
  • Checkout lines 99 and 76 in the compiled JSP file `main_jsp.java` most chances are that `bundle` is null – Nir Alfasi Dec 16 '12 at 06:11
  • @alfasin: this can impossibly produce this stacktrace. The `#{}` things are EL (`javax.el`) which doesn't appear in the trace at all and which is at its own also "null-safe". – BalusC Dec 16 '12 at 10:55
  • @BalusC Cant he add before that line something like: `<%="bundle = "+bundle%>` ? – Nir Alfasi Dec 16 '12 at 16:32
  • @alfasin: I'm not sure how doing that would be helpful in this particular question. I recommend to take some time apart to learn JSF/JSP if you're interested. – BalusC Dec 16 '12 at 16:49
  • @BalusC if `bundle` is null then `bundle.Welcome` will throw a `NullPointerException` - no ? anyways, by viewing line 99 in the compiled JSP file main_jsp.java you should be able to find that the NPE is because of the `FacesContext` (like you wrote in your answer) which was my first suggestion... – Nir Alfasi Dec 16 '12 at 18:07
  • @alfasin: you have apparently never used EL before. The answer to the OP's concrete question is already given below. – BalusC Dec 16 '12 at 19:21

1 Answers1

2

The Duke's Bank example is based on JSF, which is a component based MVC framework which previously used to use JSP as "View". JSF pages are supposed to be opened by an URL which matches the <url-pattern> of the FacesServlet as definied in webapp's web.xml. For example, if it's *.jsf, then you should open it by main.jsf instead of main.jsp. Or if it's /faces/*, then you should open it by faces/main.jsp instead of main.jsp. This would invoke the FacesServlet which in turn will create the FacesContext and do all the JSF works.

You're getting a NPE on that line because the <f:view> (which is represented by the line at org.apache.jsp.main_jsp._jspx_meth_f_005fview_005f0(main_jsp.java:99) in the stack trace) is trying to find JSF's FacesContext, but can't seem to find one. This is true, since the FacesContext is supposed to be created by the FacesServlet.

See also:


Unrelated to the concrete problem: the legacy Java EE 5 tutorial is not the right tutorial to read for JBoss 7. JBoss 7 is a modern Java EE 6 compatible container. Since Java EE 6, JSP is deprecated as JSF view technology and succeeded by Facelets. Also, JSF 1.x (part of Java EE 5) is really not what you would like to use these days, you should be heading to JSF 2.x (part of Java EE 6).

Community
  • 1
  • 1
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • Many thanks for your help. I am quite prepared to abandon my example in favour of the Java EE 6 tutorial if, as you point out, it is the newer way of doing things. At the end of the day all I want is to learn an appropriate Java based server technology. – Dobbo Dec 17 '12 at 00:28