[Resolvido]NullPointerException em consulta para o AutoComplete do PrimeFace

Ola galera, quando tento usar o autocomplete do primefaces, ocorre o erro de NPE, porém na tabela do meu banco de dados eu tenho 2 pessoas, logo essa mensagem não deveria aparecer,
segue meu stackstrace:

Stacktrace:

WARNING: /pages/protected/admin/function/person/gereperson.xhtml @20,70 completeMethod="#{personMB.complete}": java.lang.NullPointerException javax.el.ELException: /pages/protected/admin/function/person/gereperson.xhtml @20,70 completeMethod="#{personMB.complete}": java.lang.NullPointerException at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:359) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786) at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:927) at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.teste.ems2.filter.AdminPagesFilter.doFilter(AdminPagesFilter.java:31) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.teste.ems2.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:69) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NullPointerException at com.teste.ems2.mb.personMB.complete(personMB.java:155) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstValue.invoke(AstValue.java:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) ... 29 more

PersonMB - método complete

[code]public List complete(String query) {

	List<Person> queryResult = new ArrayList<Person>();
	if (persons == null ){
		persons = personFacede.listAll(); // linha 155 do erro
	}
	for (Person p: persons) {
		if(p.getName().toLowerCase().contains(query)){
			queryResult.add(p);
		}
	}
	return queryResult;
}[/code]

PersonFacede - metodo listAll

public List<Person> listAll() { personDAO.beginTransaction(); List<Person> result = personDAO.findAll(); personDAO.closeTransaction(); return result; }

PersonDAO - herda AbstractDAO - método findAll

public List<T> findAll() { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); return em.createQuery(cq).getResultList(); }

AutoComplete do Prime

Obrigado pela ajuda!

coloca um breakpoint na linha 155 do seu
PersonMB

Caused by: java.lang.NullPointerException  
    at com.teste.ems2.mb.personMB.complete(personMB.java:155)

Coloquei, mas não adianta nada, o erro NPE vem quando ele tenta executar essa linha, o sistema funciona perfeitamente.

Continua com o mesmo erro…

Caused by: java.lang.NullPointerException at com.teste.ems2.mb.PersonMB.complete(PersonMB.java:155) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.el.parser.AstValue.invoke(AstValue.java:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) ... 29 more

posta o código que tem essa linha, e indica ela com um comentário,

Ja postei, leia o meu primeiro post fazendo um favor.

PersonMB - método complete

post o resto da classe por favor

Ai esta, não vejo nada errado nela.

[code]
@ViewScoped
@ManagedBean
public class PersonMB extends AbstractMB implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private Person person;
private List<Person> person;
private User user;
private UserMB userMB;
private PersonFacade personFacede;
private List<RolePerson> roles;
private RolePersonFacade roleFacede;


public List<RolePerson> getAllRoles() {
	if (roles == null) {
		loadRoles();
	}
	return roles;
}

private RolePersonFacade getRoleFacede() {
	if (roleFacede == null) {
		roleFacede= new RolePersonFacade();
	}
	return roleFacede;
}

private void loadRoles() {
	roles = getRoleFacede().listAll();
}

public Person getPerson() {
	if (person == null) {
		person = new Person();
	}
	return person;
}

public void setPerson(Person person) {
	this.person = person;
}

public User getUser() {
	if (user == null) {
		user= new User();
	}
	return user;
}

public void setUser(User user) {
	this.user = user;
}

public PersonFacade getPersonFacade() {
	if (personFacede == null) {
		personFacede = new PersonFacade();
	}
	return personFacede;
}

public UserMB getUserMB() {
	if (userMB == null) {
		userMB = new UserMB();
	}
	return userMB;
}

public List<Person> getAllPerson() {
	if (persons == null) {
		loadPersons();
	}
	return persons;
}

private void loadPersons() {
	persons = getPersonFacade().listAll();
}

public void resetPerson() {
	person = new Person();
	user = new User();
}

public void createPerson() {
	try {
		getPersonFacade().createPerson(person);
		user.setPerson(person);
		user.setPassword(PasswordHash.create(user.getPassword()));
		getUserMB().createUser(user);
		closeDialog();
		displayInfoMessageToUser("Created With Sucess");
		loadPersons();
		resetPerson();
	} catch (Exception e) {
		keepDialogOpen();
		displayErrorMessageToUser("Ops, we could not create. Try again later");
		e.printStackTrace();
	}
}

public void updatePerson() {
	try {
		getPersonFacade().updatePerson(person);
		closeDialog();
		displayInfoMessageToUser("Updated With Sucess");
		loadPersons();
		resetPerson();
	} catch (Exception e) {
		keepDialogOpen();
		displayErrorMessageToUser("Ops, we could not create. Try again later");
		e.printStackTrace();
	}
}

public void deletePerson() {
	try {
		getPersonFacade().deletePerson(person);
		getUserMB().deleteUser(user);
		closeDialog();
		displayInfoMessageToUser("Deleted With Sucess");
		loadPersons();
		resetPersone();
	} catch (Exception e) {
		keepDialogOpen();
		displayErrorMessageToUser("Ops, we could not create. Try again later");
		e.printStackTrace();
	}
}

public List<Person> complete(String query) {
	
	List<Person> queryResult = new ArrayList<Person>();
	if (persons == null ){
		persons = personFacede.listAll();
	}
	for (Person p: persons) {
		if(p.getNom().toLowerCase().contains(query)){
			queryResult.add(p);
		}
	}
	return queryResult;
}

}[/code]

estou pedindo o resto da classe porque quero ver como vc esta instanciando esse atributo

personFacede

public List<Person> complete(String query) {  
          
        List<Person> queryResult = new ArrayList<Person>();  
        if (persons == null ){  
            persons = personFacede.listAll(); // se esse atributo for personFacede iqual null vc vai ter um ErroDoProgramadorException
        }  
        for (Person p: persons) {  
            if(p.getName().toLowerCase().contains(query)){  
                queryResult.add(p);  
            }  
        }  
        return queryResult;  
    }  

instancie a classe antes de chamar o método

personFacede.listAll();

Nesta chamada, personFacade está nulo.
Não seria o caso de invocar o getter do mesmo?

God! LOL

Obrigado pela ajuda, que erro bobo que cometi, fiquei brigando com o DAO e tudo mais e não prestei atenção a isso:

Resolvi como voces disseram, coloquei:

Funcionou!

OBS: posso aproveitar o topico para pedir ajuda para fazer o converter (POJO) do meu objeto Pessoa ?

Gostaria de quando o usuario selecionar o nome da pessoa, carregasse todos os dados referente à pessoa, pra isso preciso fazer o converter, porém não esta sei como fazer esse link do converter com os <p:inputText>

E desde quando pojo é um converter?
Faça assim, esse problema foi resolvido? Edite o tópico original e coloque no título o “prefixo” [Resolvido].
Crie um novo tópico e discorra sobre tuas mazelas com o converter.