soy nuevo por aquí. Estoy presentando un problema en un controller y una clase implementada. Siempre obtengo el mismo error en las mismas líneas. Estoy usando JSF en Eclipse. Intento realizar una búsqueda por un parámetro String, pero al ejecutar la acción obtengo la excepción.
ADVERTENCIA: #{mbVenta.buscarClienteXApellido}: java.lang.NullPointerException
javax.faces.FacesException: #{mbVenta.buscarClienteXApellido}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 29 more
Caused by: java.lang.NullPointerException
at com.farmacia.service.ClienteServiceImpl.listaXApellidoCliente(ClienteServiceImpl.java:14)
at com.farmacia.controller.VentaController.buscarClienteXApellido(VentaController.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 30 more
La consola indica las líneas 14 y 74 de ClienteServiceImpl y VentaController, respectivamente. Comparto el código a continuación:
package com.farmacia.service;
import java.util.List;
import com.farmacia.entity.Cliente;
import com.farmacia.repository.ClienteDAOImpl;
public class ClienteServiceImpl implements ClienteService{
private ClienteDAOImpl clienteDAOImpl;
public ClienteServiceImpl() {
clienteDAOImpl = new ClienteDAOImpl();
}
@Override
public List<Cliente> listaXApellidoCliente(String ape) {
return clienteDAOImpl.listaXApellidoCliente(ape);
}
}
Ese es el formulario desde el que llamo al método "buscarClienteXApellido".
<h:form id="frmConsultaCliente">
<p:panelGrid columns="4" columnClasses="text-right,ui-fluid" styleClass="ui-panelgrid-blank">
<p:outputLabel value="Apellido" />
<h:inputText value="#{mbVenta.apellido}"/>
<p:commandButton icon="ui-icon-search"
title="Buscar cliente"
action="#{mbVenta.buscarClienteXApellido}"
update="tablaCliente"/>
<f:facet name="footer">
<h:panelGroup style = "display:block; text-align:center">
<p:dataTable id="tablaCliente" style="width:750px" value="#{mbVenta.listaClientes}" var="rowCliente">
<f:facet name="header">Lista Clientes</f:facet>
<p:column headerText="CÓDIGO">
<h:outputText value="#{rowCliente.codCliente}"/>
</p:column>
<p:column headerText="NOMBRE">
<h:outputText value="#{rowCliente.nomCliente}"/>
</p:column>
<p:column headerText="APELLIDO">
<h:outputText value="#{rowCliente.apeCliente}"/>
</p:column>
<p:column style="width:50px">
<p:commandButton icon="fa fa-fw fa-edit"/>
</p:column>
</p:dataTable>
</h:panelGroup>
</f:facet>
</p:panelGrid>
</h:form>
En contraste a todo ello, realicé el mismo proceso para otra consulta y esa sí funciona correctamente. Agradeceré cualquier comentario.