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
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 theFacesServletas definied in webapp’sweb.xml. For example, if it’s*.jsf, then you should open it bymain.jsfinstead ofmain.jsp. Or if it’s/faces/*, then you should open it byfaces/main.jspinstead ofmain.jsp. This would invoke theFacesServletwhich in turn will create theFacesContextand do all the JSF works.You’re getting a NPE on that line because the
<f:view>(which is represented by the lineat org.apache.jsp.main_jsp._jspx_meth_f_005fview_005f0(main_jsp.java:99)in the stack trace) is trying to find JSF’sFacesContext, but can’t seem to find one. This is true, since theFacesContextis supposed to be created by theFacesServlet.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).