Pessoal, estou implementando uma aplicação de cadastros de atendimento para meu TCC
sobre o Framework Demoiselle, utilizando o arquétipo demoiselle-jsf-jpa, me baseando
no exemplo do bookmark, criei as entidades: Cliente, Funcionario, TipoAtendimento e Atendimento.
E demais classes controladoras para cada camada.
Meu problema é que para a tela de cadastro de atendimento, estou utilizando o
componente p:autocomplete do primefaces, que solicita a implementação de um converter.
Na tela de Cadastro de Atendimento o componente consegue fazer a busca dos nomes que estão armazenados
no banco, das 3 entidades Cliente, Funcionario e TipoAtendimento só que quando mando salvar aparece a seguinte exception:
16:16:54,599 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/tcc].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
at br.gov.frameworkdemoiselle.sample.tcc.view.ClienteConverter.getAsObject(ClienteConverter.java:24) [:]
at org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:226) [:]
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1023) [:2.0.3-]
at javax.faces.component.UIInput.validate(UIInput.java:953) [:2.0.3-]
at javax.faces.component.UIInput.executeValidate(UIInput.java:1204) [:2.0.3-]
at javax.faces.component.UIInput.processValidators(UIInput.java:693) [:2.0.3-]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-]
at javax.faces.component.UIForm.processValidators(UIForm.java:240) [:2.0.3-]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-]
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-]
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1159) [:2.0.3-]
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:72) [:2.0.3-]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) [:2.0.3-]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) [:2.0.3-]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) [:2.0.3-]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final]
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) [:6.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [:6.0.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]
//======================================================================
A entidade Atendimento está implementada da seguinte forma:
@Entity
public class Atendimento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@Column
private Date dataAtendimento;
@Column
@Size(max = 255)
private String observacao;
@ManyToOne
private Cliente cliente;
@ManyToOne
private Funcionario funcionario;
@ManyToOne
private TipoAtendimento tipoAtendimento;
//==========================================================
Implementação do Converter
@FacesConverter(value = "clienteConverter")
public class ClienteConverter implements Converter {
@Inject
private ClienteBC clienteBC;
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
Cliente cliente = clienteBC.findByNomeCliente(string);
return cliente;
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
Cliente cliente = new Cliente();
cliente = (Cliente) o;
return cliente.getNomeCliente();
}
}
//============================================================
O método clienteBC.findByNomeCliente(string) irá fazer a consulta no DAO,
onde implementei o método de busca por nome da seguinte maneira:
@PersistenceController
public class ClienteDAO extends JPACrud<Cliente, Long> {
private static final long serialVersionUID = 1L;
@Inject
@SuppressWarnings("unused")
private Logger logger;
public Cliente findByNomeCliente(String nomeCliente) {
final String jpql = "SELECT c FROM Cliente c WHERE c.nomeCliente = :" + nomeCliente;
final Query query = getEntityManager().createQuery(jpql);
Cliente cliente = (Cliente) query.getSingleResult();
return cliente;
}
}
Será que tem algo de errado com essa minha consulta???
Desde já obrigado!!