1

Estoy trabajando en una aplicación y me arroja el siguiente error al intentar recuperar los datos de un bean @request desde un bean de Session:

java.lang.NullPointerException

Mis bean:

package Com.polloolympico.beans;

import com.polloolympico.entitys.RecHumEmpleado;
import com.polloolympico.entitys.RecHumMarcacioncasino;
import com.polloolympico.session.RecHumEmpleadoFacadeLocal;
import com.polloolympico.session.RecHumMarcacioncasinoFacadeLocal;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedProperty;

/**
 *
 * @author Aux_Desarrollo
 */
@Named(value = "empleadoBean")
@SessionScoped
public class EmpleadoBean implements Serializable {


    @ManagedProperty(value="#{marcacionBean}") 
    private MarcacionBean marcacionBean;

    private int codEmpleado;
    private String nombre;
    private String apellido;
    private String cc;
    private String carnet;
    private Date vencimientocurso;
    private Date altaLaboral;

    //Var Registrar marcación
    private boolean activo;
    private String estado;
    private Date fecha;
    private String hora;
    private String observacion;
    private int idRecHumMarcacionCasino;
    private List<RecHumMarcacioncasino> listaMarcacionCasino;

    @EJB
    RecHumEmpleadoFacadeLocal empleadoEJB;

    @EJB
    RecHumMarcacioncasinoFacadeLocal marcacionEJB;

    public Date getVencimientocurso() {
        return vencimientocurso;
    }

    public void setVencimientocurso(Date vencimientocurso) {
        this.vencimientocurso = vencimientocurso;
    }

    public Date getAltaLaboral() {
        return altaLaboral;
    }

    public void setAltaLaboral(Date altaLaboral) {
        this.altaLaboral = altaLaboral;
    }

    public String getCarnet() {
        return carnet;
    }

    public void setCarnet(String carnet) {
        this.carnet = carnet;
    }

    public int getCodEmpleado() {
        return codEmpleado;
    }

    public void setCodEmpleado(int codEmpleado) {
        this.codEmpleado = codEmpleado;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getCc() {
        return cc;
    }

    public void setCc(String cc) {
        this.cc = cc;
    }

    public int getIdRecHumMarcacionCasino() {
        return idRecHumMarcacionCasino;
    }

    public void setIdRecHumMarcacionCasino(int idRecHumMarcacionCasino) {
        this.idRecHumMarcacionCasino = idRecHumMarcacionCasino;
    }

    public boolean getActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String getHora() {
        return hora;
    }

    public void setHora(String hora) {
        this.hora = hora;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public MarcacionBean getMarcacionBean() {
        return marcacionBean;
    }

    public void setMarcacionBean(MarcacionBean marcacionBean) {
        this.marcacionBean = marcacionBean;
    }

    public void insertarMarcacion() {

        fecha = getFechaActual();
        hora = getHoraActual();
        activo = true;
        marcacionBean.findMarcacionEmpleadoxFecha(fecha, carnet);
        observacion=marcacionBean.getObservacion();
        estado=marcacionBean.getEstado();


        RecHumMarcacioncasino marcacionSave = new RecHumMarcacioncasino();
        marcacionSave.setIdRecHumMarcacionCasino(idRecHumMarcacionCasino);
        marcacionSave.setActivo(activo);
        marcacionSave.setCodCarnet(carnet);
        marcacionSave.setCodEmpleado(codEmpleado);
        marcacionSave.setEstado(estado);
        marcacionSave.setFecha(fecha);
        marcacionSave.setHora(hora);
        marcacionSave.setObservacion(observacion);

        if (marcacionSave != null) {
          marcacionEJB.create(marcacionSave);
        } else {

        }

    }

    public Date getFechaActual() {
        Date ahora = new Date();
        return ahora;
    }

    public String getHoraActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("hh:mm:ss");
        return formateador.format(ahora);
    }

    public EmpleadoBean() {

    }

    public String findEmpleado() {
        RecHumEmpleado empleado = new RecHumEmpleado();
        empleado = empleadoEJB.findCarnet(carnet);

        if (empleado != null) {
            nombre = empleado.getNombre();
            apellido = empleado.getApellido();
            cc = empleado.getCc();
            codEmpleado = empleado.getCodEmpleado();
            insertarMarcacion();
        } else {
            nombre = "Error carnet no registrado";
            apellido = "Error carnet no registrado";
            cc = "Error carnet no registrado";
        }
        return "welcomePrimefaces";
    }

}

package Com.polloolympico.beans;

import com.polloolympico.entitys.RecHumMarcacioncasino;
import com.polloolympico.session.RecHumMarcacioncasinoFacadeLocal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named(value = "marcacionBean")
@RequestScoped
public class MarcacionBean{

    @EJB
    RecHumMarcacioncasinoFacadeLocal marcacionEJB;

    private int codEmpleado;
    private boolean activo;
    private String estado;
    private Date fecha;
    private String hora;
    private String observacion;
    private String codCarnet;
    private int idRecHumMarcacionCasino;
    private List<RecHumMarcacioncasino> listaMarcacionCasino;

    public int getIdRecHumMarcacionCasino() {
        return idRecHumMarcacionCasino;
    }

    public void setIdRecHumMarcacionCasino(int idRecHumMarcacionCasino) {
        this.idRecHumMarcacionCasino = idRecHumMarcacionCasino;
    }

    public int getCodEmpleado() {
        return codEmpleado;
    }

    public void setCodEmpleado(int cod_Empleado) {
        this.codEmpleado = cod_Empleado;
    }

    public boolean getActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String getHora() {
        return hora;
    }

    public void setHora(String hora) {
        this.hora = hora;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public String getCodCarnet() {
        return codCarnet;
    }

    public void setCodCarnet(String cod_carnet) {
        this.codCarnet = cod_carnet;
    }

    public void findMarcacionEmpleadoxFecha(Date fecha, String codCarnet) {
        listaMarcacionCasino = marcacionEJB.findFechaxEmpleado(fecha, codCarnet);
        if (listaMarcacionCasino.size() > 0) {
            observacion = "Empleado intento marcar mas de una vez";
            estado = "Anulada por intento de marcacion mas de una vez";
        } else {
            observacion = "Marcación valida para casino";
            estado = "Ingresada correctamente";
        }

    }

    public Date getFechaActual() {
        Date ahora = new Date();
        return ahora;
    }

    public String getHoraActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("hh:mm:ss");
        return formateador.format(ahora);
    }

    public MarcacionBean() {

    }
}

Mi AbstractFacade

  /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.polloolympico.session;

import java.util.List;
import javax.persistence.EntityManager;
import java.util.Date;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;

/**
 *
 * @author Aux_Desarrollo
 */
public abstract class AbstractFacade<T> {

    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
       // getEntityManager().persist(entity);
          try {
        getEntityManager().persist(entity);
    } catch (ConstraintViolationException e) {
        // Aqui tira los errores de constraint
        for (ConstraintViolation actual : e.getConstraintViolations()) {
            System.out.println(actual.toString());
        }
    }
    }


    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    //  Buscar por codigo de carnet
    public T findCarnet(String carnet) {
        T entity=null;
        try {
            return (T)getEntityManager().createNamedQuery("RecHumEmpleado.findByCarnet")
                    .setParameter("carnet", carnet)
                    .getSingleResult();


        } catch (Exception e) {
            return null;
        }



    }

        //  Buscar por fecha y codigo de empleado
    public List<T> findFechaxEmpleado(Date fecha,String carnet) {
        T entity=null;
        try {
            return (List<T>)getEntityManager().createNamedQuery("RecHumMarcacioncasino.findByFechaxEmpleado")
                    .setParameter("fecha", fecha)
                    .setParameter("codCarnet", carnet)
                    .getResultList();
        } catch (Exception e) {
            return null;
        }


    }

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

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0] + 1);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }

}

El erro ocurre cuando desde empleadoBean llamo al metodo findMarcacionEmpleadoxFecha(fecha, carnet)

Este es el log de error que aparece:

  • Stack Trace

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) 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:658) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException at Com.polloolympico.beans.EmpleadoBean.insertarMarcacion(EmpleadoBean.java:170) at Com.polloolympico.beans.EmpleadoBean.findEmpleado(EmpleadoBean.java:217) 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 com.sun.el.parser.AstValue.invoke(AstValue.java:289) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) ... 36 more

Ruslan López
  • 10,060
  • 11
  • 35
  • 68
  • 1
    Mira [ask] para que tu pregunta sea mejor recibida. Tambien, aprovecha y haz el [tour] para entender mejor como funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! – gbianchi Feb 05 '19 at 16:31
  • 6
    Posible duplicado de [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – gbianchi Feb 05 '19 at 16:32
  • El problema esta en los métodos getFechaActual() y getHoraActual(). Necesitas tener disponibles esos métodos en tu bean. – Fernando Carraro Feb 05 '19 at 16:34
  • Procura añadir el fragmento completo del log, no sólo el tipo de excepción. – Alfabravo Feb 05 '19 at 16:39
  • @FernandoCarraro ambos estan definidos tanto el bean que hace el llamado(empleadoBean) y el que es llamado(marcacionBean) – Erik Brian Galindo Feb 05 '19 at 18:50

3 Answers3

1

Veo que estás usando beans de CDI (@Named) pero inyectando como si fuera un JSF @ManagedBean.

Prueba cambiando

@ManagedProperty(value="#{marcacionBean}") 
private MarcacionBean marcacionBean;

por

@Inject
private MarcacionBean marcacionBean;

en EmpleadoBean

0

Podrías usar la anotación @PostConstruct para tener disponibles ciertos métodos u operaciones en tu Bean.

@PostConstruct
public void insertarMarcacion() {

        fecha = getFechaActual();
        hora = getHoraActual();
        activo = true;
        marcacionBean.findMarcacionEmpleadoxFecha(fecha, carnet);
        observacion=marcacionBean.getObservacion();
        estado=marcacionBean.getEstado();


        RecHumMarcacioncasino marcacionSave = new RecHumMarcacioncasino();
        marcacionSave.setIdRecHumMarcacionCasino(idRecHumMarcacionCasino);
        marcacionSave.setActivo(activo);
        marcacionSave.setCodCarnet(carnet);
        marcacionSave.setCodEmpleado(codEmpleado);
        marcacionSave.setEstado(estado);
        marcacionSave.setFecha(fecha);
        marcacionSave.setHora(hora);
        marcacionSave.setObservacion(observacion);

        if (marcacionSave != null) {
          marcacionEJB.create(marcacionSave);
        } else {

        }

    }
Fernando Carraro
  • 1,247
  • 9
  • 14
  • Agradezco tu ayuda, sin embargo al hacer lo que me sugiere me arroja un error: WELD-000049: Unable to invoke public void Com.polloolympico.beans.EmpleadoBean.insertarMarcacion() on Com.polloolympico.beans.EmpleadoBean@2eb18aa3 – Erik Brian Galindo Feb 05 '19 at 18:41
-1

Te podría quizás ayudar si me dijeras que hay en la linea 170 de tu Clase EmpleadoBean.

Ya que veo esto en el stacktrace:

Com.polloolympico.beans.EmpleadoBean.insertarMarcacion(EmpleadoBean.java:170) at

Analizando esa línea con respecto al resto se puede saber que sucede.