0

I try to set up a search by name using EJB and JSF, but I have an exception that persists every time and I can not find the solution.

Entity :

package com.mycompany.projetplanetart;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;


@Entity
@Table(name = "etablissement")
@XmlRootElement
@NamedQueries({
@NamedQuery(name="Etablissement.findByName", query = "SELECT e FROM     Etablissement e WHERE e.nom = :nom")
,@NamedQuery(name = "Etablissement.findAll", query = "SELECT e FROM Etablissement e")
, @NamedQuery(name = "Etablissement.findByNauto", query = "SELECT e FROM Etablissement e WHERE e.nauto = :nauto")
, @NamedQuery(name = "Etablissement.findByCodeINSEE", query = "SELECT e FROM Etablissement e WHERE e.codeINSEE = :codeINSEE")
, @NamedQuery(name = "Etablissement.findByIdEtab", query = "SELECT e FROM Etablissement e WHERE e.idEtab = :idEtab")})
public class Etablissement implements Serializable {

private static final long serialVersionUID = 1L;
@Column(name = "N_auto")
private Integer nauto;
@Lob
@Size(max = 65535)
@Column(name = "nom")
private String nom;
@Lob
@Size(max = 65535)
@Column(name = "adresse")
private String adresse;
@Lob
@Size(max = 65535)
@Column(name = "complement")
private String complement;
@Column(name = "code_INSEE")
private Integer codeINSEE;
@Lob
@Size(max = 65535)
@Column(name = "commune")
private String commune;
@Lob
@Size(max = 65535)
@Column(name = "region_administrative")
private String regionAdministrative;
@Lob
@Size(max = 65535)
@Column(name = "geo_ban")
private String geoBan;
@Lob
@Size(max = 65535)
@Column(name = "geo_insee")
private String geoInsee;
@Lob
@Size(max = 65535)
@Column(name = "corrdonnees_finales")
private String corrdonneesFinales;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_etab")
private Integer idEtab;

public Etablissement() {
}

public Etablissement(Integer idEtab) {
    this.idEtab = idEtab;
}

public Integer getNauto() {
    return nauto;
}

public void setNauto(Integer nauto) {
    this.nauto = nauto;
}

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}

public String getAdresse() {
    return adresse;
}

public void setAdresse(String adresse) {
    this.adresse = adresse;
}

public String getComplement() {
    return complement;
}

public void setComplement(String complement) {
    this.complement = complement;
}

public Integer getCodeINSEE() {
    return codeINSEE;
}

public void setCodeINSEE(Integer codeINSEE) {
    this.codeINSEE = codeINSEE;
}

public String getCommune() {
    return commune;
}

public void setCommune(String commune) {
    this.commune = commune;
}

public String getRegionAdministrative() {
    return regionAdministrative;
}

public void setRegionAdministrative(String regionAdministrative) {
    this.regionAdministrative = regionAdministrative;
}

public String getGeoBan() {
    return geoBan;
}

public void setGeoBan(String geoBan) {
    this.geoBan = geoBan;
}

public String getGeoInsee() {
    return geoInsee;
}

public void setGeoInsee(String geoInsee) {
    this.geoInsee = geoInsee;
}

public String getCorrdonneesFinales() {
    return corrdonneesFinales;
}

public void setCorrdonneesFinales(String corrdonneesFinales) {
    this.corrdonneesFinales = corrdonneesFinales;
}

public Integer getIdEtab() {
    return idEtab;
}

public void setIdEtab(Integer idEtab) {
    this.idEtab = idEtab;
}
public Etablissement (Etablissement etab){
    this.nom=etab.nom;
    this.regionAdministrative=etab.regionAdministrative;
    this.nauto=etab.nauto;
    this.idEtab=etab.idEtab;
    this.geoInsee=etab.geoInsee;
    this.corrdonneesFinales=etab.corrdonneesFinales;
    this.geoBan=etab.geoBan;
    this.complement=etab.complement;
    this.commune=etab.commune;
    this.codeINSEE=etab.codeINSEE;
    this.adresse=etab.adresse;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (idEtab != null ? idEtab.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Etablissement)) {
        return false;
    }
    Etablissement other = (Etablissement) object;
    if ((this.idEtab == null && other.idEtab != null) || (this.idEtab != null && !this.idEtab.equals(other.idEtab))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "com.mycompany.projetplanetart.Etablissement[ idEtab=" + idEtab +     " ]";
}

}

SearchService :

import com.mycompany.projetplanetart.Etablissement;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;



@Stateless
public class RechercherService {

@PersistenceContext
private  EntityManager em;

public List<Etablissement> searchEtab(Integer id){

     return     em.createNamedQuery("Etablissement.findByIdEtab").setParameter("idEtab",        id).getResultList();

    }

}

SearchBean :

import com.mycompany.projetplanetart.Etablissement;
import ejb.*;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;


@Named(value = "rechercheBean")
@RequestScoped
public class RechercheBean {

@Inject 
RechercherService rechercherService;

private  List<Etablissement> etab=new ArrayList<>();



public List<Etablissement> getEtab() {
    return etab;
}

public void setEtab(List<Etablissement> etab) {
    this.etab = etab;
}



private String nom;

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}

private Integer id;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}


public String search(){
    rechercherService=new RechercherService();
    this.etab=rechercherService.searchEtab(id);
    return "resultat";
}



/**
 * Creates a new instance of RechercheBean
 */
public RechercheBean() {

}

}

resultat.xhtml :

<?xml version='1.0' encoding='UTF-8' ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
     <h:head>
         <title>    Facelet Title</title>
    </h:head>
<h:body>
    <f:view>
        <h:form>
            entré : <h:inputText value="#{rechercheBean.id}"/> 
            <h:commandButton value="Search" action="#{rechercheBean.search()}"/>

            <h:form>
                <h1><h:outputText value="List"/></h1>
                <h:dataTable value="#{rechercheBean.etab}" var="item">
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Nauto"/>
                        </f:facet>
                        <h:outputText value="#{item.nauto}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Nom"/>
                        </f:facet>
                        <h:outputText value="#{item.nom}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Adresse"/>
                        </f:facet>
                        <h:outputText value="#{item.adresse}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Complement"/>
                        </f:facet>
                        <h:outputText value="#{item.complement}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="CodeINSEE"/>
                        </f:facet>
                        <h:outputText value="#{item.codeINSEE}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Commune"/>
                        </f:facet>
                        <h:outputText value="#{item.commune}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="RegionAdministrative"/>
                        </f:facet>
                        <h:outputText value="#{item.regionAdministrative}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="GeoBan"/>
                        </f:facet>
                        <h:outputText value="#{item.geoBan}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="GeoInsee"/>
                        </f:facet>
                        <h:outputText value="#{item.geoInsee}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="CorrdonneesFinales"/>
                        </f:facet>
                        <h:outputText value="#{item.corrdonneesFinales}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="IdEtab"/>
                        </f:facet>
                        <h:outputText value="#{item.idEtab}"/>
                    </h:column>
                </h:dataTable>
            </h:form>

        </h:form>
    </f:view>

</h:body>

The exception :

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:1693)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
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:466)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:169)
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:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:526)
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:593)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
at java.lang.Thread.run(Thread.java:745)
 Caused by: java.lang.NullPointerException
at ejb.RechercherService.searchEtab(RechercherService.java:28)
at bean.RechercheBean.search(RechercheBean.java:64)
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 javax.el.ELUtil.invokeMethod(ELUtil.java:332)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
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

Thank you .

AmineBena17
  • 23
  • 1
  • 5
  • Why do you do this: `rechercherService=new RechercherService();`? You already annotated the field to inject the service into your RechercheBean, so don't create another instance yourself. If you create it yourself, the em field in the service is not initialized. – dunni Feb 12 '17 at 12:58
  • @dunni You're right ! thank you it works now – AmineBena17 Feb 12 '17 at 13:20

0 Answers0