Richard Wеrеzaк
Richard Wеrеzaк

Reputation: 1561

Simple JSF with Managed Bean cannot be loaded by JBoss 7.1 (JBAS018210)

I am getting a strange error in my JBoss log when i try to do a very simple JSF app via Eclipse. So i created a simple scenario to ask, if i have missed something fundamental in my JSF example. Alternatively, i suspect there might be a mis-configuration or bug in my particular tooling or environment.

I have created a very simple JSF app. It's just one JSF html page (hello.jsp) which collects a name via a ManagedBean and transitions to a second JSF html page (ok.jsp). The bean has 1 getter, 1 setter, and 1 action method (addContact).

I am not using annotations, just a simple faces-config.xml file with one ManagedBean entry and one navigation rule. The bean is named "contact" and the class is "com.mbeans.ContactBean". I believe that the mapping is all correct.

I am using JBoss 7.1 via Eclipse Juno SR2. It's a JSF 2.0 app. I have loaded the latest JBoss Tools 4.0 for Juno.

The app only consists of the following files:

web.xml
faces-config.xml
ContactBean.java
hello.jsp
ok.jsp

The file contents are below. But I'll add some colour commentary on how they were created via Eclipse (which you might want to skim or ignore):

I go into Eclipse and create a new project. I select "Dynamic Web Project" with the following settings:

Target runtime = JBoss 7.1 Runtime

Configuration = Dynamic Configuration for JBoss 7.1 Runtime

Generate a web.xml = CHECKED

I right-click WebContent and create a new JSP file (Filename = hello.jsp). I use JSP Template = New JSF Page (html).

I add a few lines representing a simple form accessing a ManagedBean named "contact" so that hello.jsp looks like this:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Add Contact</title>
</head>
<body>
    <f:view>
        <h2>Add Contact</h2>
        <h:form>
            Name:<br>
            <h:inputText value="#{contact.name}" />
            <h:commandButton value="Add Contact"
                action="#{contact.addContact}" type="submit" />
        </h:form>
    </f:view>
</body>
</html>

Similarly, I add the following JSP file (ok.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>OK - Added New Contact</title>
</head>
<body>
    <f:view>
        <p>
            The address for
            <h:outputText value="#{contact.name}" />
            was successfully added.
        </p>
    </f:view>
</body>
</html>

I right-click on the project (JSFTest) and add a class with the following settings:

Package = com.mbeans

Name = ContactBean

and I edit the class to appear like so:

package com.mbeans;

public class ContactBean {

    public ContactBean() {super();}

    String name;
    
    public String getName() {return name;}

    public void setName(String name) {this.name = name;}

    public String addContact() {
        System.out.println("Name: " + getName());
        return "success";
    }  
}

Then I right-clicked the WEB-INF folder and selected New->Other->JBoss Tools Web->JSF->Faces Config with the following settings:

Folder:* = /JSFTest

Name:* = faces-config

Version: 2.0

Register in web.xml = CHECKED

In the new faces-config.xml that is created, I right-click Managed Beans->New->Managed Bean... and set the following:

Scope = application

Class:* = com.mbeans.ContactBean

Name:* = contactBean

Then I right-clicked Navigation Rules->New->Rule ... and left the dialog box blank and clicked Finish.

I right-clicked "[any]"->New->Case... and set the following:

From Outcome: = success

From Action: = #{contact.addContact}

ToView ID:* = /ok.jsp

this, finally, yields the following faces-config.xml file in the WEB-INF folder:

<?xml version="1.0"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
 <managed-bean>
  <managed-bean-name>contact</managed-bean-name>
  <managed-bean-class>com.mbeans.ContactBean</managed-bean-class>
  <managed-bean-scope>application</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <navigation-case>
   <from-action>#{contact.addContact}</from-action>
   <from-outcome>success</from-outcome>
   <to-view-id>/ok.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>

Then I right-clicked the hello.jsp and selected Run As->Run On Server

I selected the JBoss 7.1 Runtime Server (it's the only one). The server starts successfully. (I know this JBoss server correctly runs other stuff outside of Eclipse.)

I get a 500 error and in particular, I see the following message in the log which I think is the root of the problem:

23:33:08,612 ERROR [org.jboss.web] (MSC service thread 1-3) JBAS018211: Could not load JSF managed bean class: com.mbeans.ContactBean

I think the NullPointerException may be caused by something else which I did wrong unrelated to that error message above. I am most concerned about the above error. But if anyone can point out my mistake which clears this NullPointerException, I would appreciate it so that I can eliminate it. Previously I got a different 500 error without the NPE but still had that JBAS018211 in the log. In other words, I think the NPE is annoying but irrelevant.

The full log is:

23:33:06,543 INFO  [org.jboss.modules] JBoss Modules version 1.1.1.GA
23:33:06,761 INFO  [org.jboss.msc] JBoss MSC version 1.0.2.GA
23:33:06,824 INFO  [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" starting
23:33:07,636 INFO  [org.xnio] XNIO Version 3.0.3.GA
23:33:07,638 INFO  [org.jboss.as.server] JBAS015888: Creating http management service using socket-binding (management-http)
23:33:07,647 INFO  [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA
23:33:07,655 INFO  [org.jboss.remoting] JBoss Remoting version 3.2.3.GA
23:33:07,678 INFO  [org.jboss.as.logging] JBAS011502: Removing bootstrap log handlers
23:33:07,686 INFO  [org.jboss.as.configadmin] (ServerService Thread Pool -- 26) JBAS016200: Activating ConfigAdmin Subsystem
23:33:07,689 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 31) JBAS010280: Activating Infinispan subsystem.
23:33:07,717 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013101: Activating Security Subsystem
23:33:07,725 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 38) JBAS011800: Activating Naming Subsystem
23:33:07,749 INFO  [org.jboss.as.security] (MSC service thread 1-10) JBAS013100: Current PicketBox version=4.0.7.Final
23:33:07,749 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension
23:33:07,752 INFO  [org.jboss.as.osgi] (ServerService Thread Pool -- 39) JBAS011940: Activating OSGi Subsystem
23:33:07,789 INFO  [org.jboss.as.connector] (MSC service thread 1-7) JBAS010408: Starting JCA Subsystem (JBoss IronJacamar 1.0.9.Final)
23:33:07,797 INFO  [org.jboss.as.naming] (MSC service thread 1-4) JBAS011802: Starting Naming Service
23:33:07,825 INFO  [org.jboss.as.mail.extension] (MSC service thread 1-12) JBAS015400: Bound mail session [java:jboss/mail/Default]
23:33:07,844 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
23:33:07,971 INFO  [org.jboss.ws.common.management.AbstractServerConfig] (MSC service thread 1-7) JBoss Web Services - Stack CXF Server 4.0.2.GA
23:33:07,982 INFO  [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-5) Starting Coyote HTTP/1.1 on http--127.0.0.1-7070
23:33:08,341 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
23:33:08,352 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-4) JBAS015012: Started FileSystemDeploymentService for directory /usr/local/jboss-as-7.1.1.Final/standalone/deployments
23:33:08,358 INFO  [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found JSFTest.war in deployment directory. To trigger deployment create a file called JSFTest.war.dodeploy
23:33:08,360 INFO  [org.jboss.as.remoting] (MSC service thread 1-10) JBAS017100: Listening on /127.0.0.1:9999
23:33:08,362 INFO  [org.jboss.as.remoting] (MSC service thread 1-3) JBAS017100: Listening on /127.0.0.1:4447
23:33:08,475 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-12) JBAS015876: Starting deployment of "JSFTest.war"
23:33:08,612 ERROR [org.jboss.web] (MSC service thread 1-3) JBAS018211: Could not load JSF managed bean class: com.mbeans.ContactBean
23:33:08,792 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-10) Initializing Mojarra 2.1.7-jbossorg-1 (20120227-1401) for context '/JSFTest'
23:33:09,663 INFO  [org.hibernate.validator.util.Version] (MSC service thread 1-10) Hibernate Validator 4.2.0.Final
23:33:09,805 INFO  [org.jboss.web] (MSC service thread 1-10) JBAS018210: Registering web context: /JSFTest
23:33:09,818 INFO  [org.jboss.as] (MSC service thread 1-2) JBAS015951: Admin console listening on http://127.0.0.1:9990
23:33:09,819 INFO  [org.jboss.as] (MSC service thread 1-2) JBAS015874: JBoss AS 7.1.1.Final "Brontes" started in 3541ms - Started 172 of 249 services (76 services are passive or on-demand)
23:33:09,873 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "JSFTest.war"
23:33:29,683 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/JSFTest].[jsp]] (http--127.0.0.1-7070-1) 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.hello_jsp._jspx_meth_f_005fview_005f0(hello_jsp.java:103)
    at org.apache.jsp.hello_jsp._jspService(hello_jsp.java:78)
    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.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(Unknown Source) [rt.jar:1.7.0_17]

That's it. That's the problem.

(as an aside, Eclipse also does not display the hover-over tag descriptions for JSF. HTML tags are OK. This makes me wonder if there's some deeper JBoss Tools misconfiguration.)

Thank you for any time spent reviewing my problem.

Upvotes: 3

Views: 8268

Answers (1)

Nikos Paraskevopoulos
Nikos Paraskevopoulos

Reputation: 40296

Try to do the following in addition to what you did:

  • Right click the project → Properties → Project Facets
  • Add the Java Server Faces facet with the correct version (yours was 2.0)
  • Click the additional configuration link at the bottom, select "Library provided by server runtime" (the default) and check the option to configure web.xml. Map the Faces Servlet at /faces/* (for the sake of this answer; you can change it later but remember to change the URLs accordingly)
  • (may be optional, but try it this way first) I prefer to deploy my applications by openning the server tab, right clicking on the server → Add/Remove... → select your application and deploy
  • After the app is successfully deployed (check the console) get the URL: http://localhost:8080/JSFTest/faces/hello.jsp

Remember the Faces Servlet mapping - /faces/*? You have to include it in the URL.

This works for me.

By the way, prefer Facelets (the XHTML option) over JSP.

Upvotes: 2

Related Questions