[jboss-user] [JBoss Seam] - Could not create Component Error

jhimmel do-not-reply at jboss.com
Mon May 21 17:56:40 EDT 2007


I tried to run a test page which uses the built-in identity class for logging a user in.  When I tried to run the application, I recieved an error which included "Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener" and "java.lang.RuntimeException: Could not create Component: org.jboss.seam.security.identity".  

The login page is called loginTestPage.xhtml.  Its code is:


  | <?xml version="1.0" encoding="ISO-8859-1" ?>
  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <ui:composition xmlns="http://www.w3.org/1999/xhtml"
  | 	xmlns:s="http://jboss.com/products/seam/taglib"
  | 	xmlns:ui="http://java.sun.com/jsf/facelets"
  | 	xmlns:f="http://java.sun.com/jsf/core"
  | 	xmlns:h="http://java.sun.com/jsf/html" template="layout/template.xhtml">
  | 
  | 	<ui:define name="body">
  | 
  | 		<h:form>
  | 			<h2>Login Test: Testing authenticate() and identity Class</h2>
  | 			<br />
  | 	
  | 					User Name: <h:inputText id="userName2" value="#{identity.username}"
  | 				size="16" maxlength="26" required="true" />
  | 			<br />
  | 					Password: <h:inputSecret id="password2"
  | 				value="#{identity.password}" size="16" maxlength="26"
  | 				required="true" />
  | 			<br />
  | 			<h:commandButton value="Login" action="#{identity.login}" />
  | 
  | 			<br />
  | 			<h:outputLabel id="LoginErrorMessage2"
  | 									   for="password2" styleClass="errorFont"
  | 									   value="#{authenticator.errorMessage}" />
  | 						 
  | 
  | 		</h:form>
  | 
  | 	</ui:define>
  | </ui:composition>
  | 
  | 

The webpage uses the standard AuthenticatorAction class, to which I added the login code and the local interface.  The local interface code includes the following:


  | package com.pmacui;
  | 
  | public interface IAuthenticator
  | {
  | 	public boolean authenticate();	
  |                 public String logout();
  | }
  | 
  | 

The AuthenticatorAction class code includes:


  | package com.pmacui;
  | 
  | import java.math.BigInteger;
  | import java.security.MessageDigest;
  | 
  | import javax.naming.Context;
  | import javax.naming.InitialContext;
  | 
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.core.FacesMessages;
  | import org.jboss.seam.log.Log;
  | import org.jboss.seam.security.Identity;
  | 
  | import com.netcentricinc.pmac.core.account.IAccountManagerLocal;
  | 
  | @Name("authenticator")
  | public class AuthenticatorAction implements IAuthenticator
  | {
  | 	// Note: In the webpage login.xhtml, remember to replace "authenticator" with
  | 	// "identity" when it comes time to use the built in Seam features for 
  | 	// authentication.  Also remember to change "checkLogin" back to "login".
  | 	@Logger
  | 	Log log;
  | 
  | 	@In
  | 	Identity identity;
  | 
  | 	//	@EJB(name = "AccountManager")
  | 	//	IAccountManagerLocal accountManagerLocal;
  | 
  | 	private static final String USER_NAME_CONST = "user";
  | 	private static final String PASSWORD_CONST = "pwd";
  | 	private String username = "";
  | 	private String password = "";
  | 	private String sResult = null;
  | 	private String errorMessage = "";
  | 	private boolean b_IsLoggedIn = false;
  | 
  | 	public String getUsername()
  | 	{
  | 		return this.username;
  | 	}
  | 	public void setUsername(String username)
  | 	{
  | 		this.username = username;
  | 	}
  | 	public String getPassword()
  | 	{
  | 		return password;
  | 	}
  | 	public void setPassword(String password)
  | 	{
  | 		this.password = password;
  | 	}
  | 	public String getResult()
  | 	{
  | 		return sResult;
  | 	}
  | 	public void setResult(String sres)
  | 	{
  | 		this.sResult = sres;
  | 	}
  | 	public String getErrorMessage()
  | 	{
  | 		return errorMessage;
  | 	}
  | 	public void setErrorMessage(String s_error)
  | 	{
  | 		this.errorMessage = s_error;
  | 	}
  | 	public boolean getB_IsLoggedIn()
  | 	{
  | 		return this.b_IsLoggedIn;
  | 	}
  | 	public void setB_IsLoggedIn(boolean b_IsLoggedIn)
  | 	{
  | 		this.b_IsLoggedIn = b_IsLoggedIn;
  | 	}
  | 
  | 	//	TODO we should be able to inject the AccountManager when we switch
  | 	//     to JBOSS 4.2 or 5.0
  | 	//	@EJB(name = "AccountManager")
  | 	//	IAccountManagerLocal accountManagerLocal;
  | 
  | 	public boolean authenticate()
  | 	{
  | 		log.info("authenticating #0", identity.getUsername());
  | 		Context jndiContext;
  | 		IAccountManagerLocal accountManagerLocal;
  | 		boolean result = false;
  | 
  | 		try
  | 		{
  | 			jndiContext = new InitialContext();
  | 			accountManagerLocal =
  | 					(IAccountManagerLocal) jndiContext.lookup("PMACServer/AccountManager/local");
  | 
  | 			String passHash = getPasswordHash(identity.getPassword());
  | 
  | 			String loginResult = accountManagerLocal.verifyCredentials(identity.getUsername(), passHash);
  | 
  | 			if (loginResult.matches(IAccountManagerLocal.SUCCESS))
  | 			{
  | 				result = true;
  | 			} // End If.
  | 			else
  | 			{
  | 				log.info(loginResult);
  | 				// FacesMessages.instance().add(loginResult);
  | 				this.errorMessage = this.errorMessage + "  Invalid Login! ";
  | 				result = false;
  | 			} // End Else.
  | 
  | 		} // End Try.
  | 		catch (Exception e)
  | 		{
  | 			// FacesMessages.instance().add("Invalid username/password");
  | 			this.errorMessage = this.errorMessage + "  A problem exists with Authenticator(). ";
  | 			return false;
  | 		} // End Catch.
  | 		return result;
  | 	}
  | 
  | 	/**
  | 	 * Password hash creation so we don't store it in the db as clear text
  | 	 * @param password
  | 	 * @return String - password hash
  | 	 */
  | 	private String getPasswordHash(String password)
  | 	{
  | 		StringBuilder hash = new StringBuilder();
  | 		try
  | 		{
  | 			password = password.trim();
  | 			//Make the hash
  | 			MessageDigest md5 = MessageDigest.getInstance("MD5");
  | 			hash.append(new BigInteger(1, md5.digest(password.getBytes())).toString(32));
  | 		}
  | 		catch (Exception e)
  | 		{
  | 			//TODO either catch the exception and print it to the log - or throw it back to the caller
  | 			e.printStackTrace();
  | 		}
  | 		return hash.toString();
  | 	}
  | 
  | public String logout()
  |     {
  |     	username = "";
  |     	password = "";
  |     	return "/login.xhtml";
  |     }
  | 
  | 

What am I missing?  Am I missing something in my Seam configuration?  Is there something missing in the code?  Any help would be greatly appreciated.  Thanks.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4047396#4047396

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4047396



More information about the jboss-user mailing list