我怎么能解决这个“Etat HTTP 500 - java.lang.NullPointerException”?

时间:2014-08-15 10:41:38

标签: web-services rest java-ee exception

我正在开发一个从我的数据库中提取数据(消息)并返回所有消息的宁静Web服务!

每条消息都是一个MsgBean(带有id,contenu,from,numexp,...)

Web服务无法返回表,因此我创建了一个包含MsgBean的表(msgTable)的新对象!

在其余控制台上运行我的Web服务时,出现此错误:


Etat HTTP 500 - java.lang.NullPointerException

输入Rapport d''exception

message java.lang.NullPointerException

描述Le serveuranrencontréuneerreur interne qui l''aempêchédesatisfairelarequête。

Click to see the rest of error


我的MsgBean是:

@XmlRootElement
public class MsgBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private int id;
    private String frommm;
    private String contenu;
    private String DateEnvoi;
    private String NumExp;
    private int idu;

      public MsgBean(){};

    @XmlElement
      public int getIdu() {
        return idu;
    }

    public void setIdu(int idu) {
        this.idu = idu;
    }



    @XmlElement
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
 @XmlElement
    public String getFrommm() {
        return frommm;
    }

    public void setFrommm(String frommm) {
        this.frommm = frommm;
    }


 @XmlElement
    public String getContenu() {
        return contenu;
    }

    public void setContenu(String contenu) {
        this.contenu = contenu;
    }
 @XmlElement
    public String getDateEnvoi() {
        return DateEnvoi;
    }

    public void setDateEnvoi(String DateEnvoi) {
        this.DateEnvoi = DateEnvoi;
    }


 @XmlElement
    public String getNumExp() {
        return NumExp;
    }

    public void setNumExp(String NameExp) {
        this.NumExp = NameExp;
    }



}

我的msgTabl是:

@XmlRootElement
public class msgTabl implements Serializable {

    String test;
    MsgBean[] m = new MsgBean[100];


   public msgTabl(){};

    @XmlElement
    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }

   @XmlElement
    public MsgBean getM(int i) {
        return m[i];
    }

    public void setM(int i, MsgBean mb) {

        this.m[i].setId(mb.getId());
        this.m[i].setIdu(mb.getIdu());
        this.m[i].setFrommm(mb.getFrommm());
        this.m[i].setNumExp(mb.getNumExp());
        this.m[i].setDateEnvoi(mb.getDateEnvoi());
        this.m[i].setContenu(mb.getContenu());
    }



}

这是我测试的网络服务:

@GET
    @Path("/historiquemethod")
    @Produces("application/json")
    //@Produces("text/plain")
    public msgTabl historique(
            @QueryParam("pseudo") String pseudo,
            @QueryParam("motDePasse") String motDePasse
    ) {


        msgTabl tab = new msgTabl();
        MsgBean ms = new MsgBean();

        // set information into our msg to test
        ms.setContenu("contenu");
        ms.setFrommm("8080");
        ms.setNumExp("2584126");
        ms.setId(1);
        ms.setIdu(2);
        ms.setDateEnvoi("date");

        // set the message into the first table case
        tab.setM(0, ms);
        tab.setTest("ok");

        return tab;
    }

1 个答案:

答案 0 :(得分:1)

setM方法中,请在第一行中执行此操作:

this.m[i] = new MsgBean();

问题是你已经实例化了你的数组,但是该数组中的对象是null。因此,您需要首先在所需索引处实例化对象,然后使用它。

评论更新

为此类getM()创建一个getter方法,并使用XmlElement对其进行注释(从当前重载的getM(int i)方法中删除注释)。 JAXB无法使用方法getM(int i),因为jaxb需要为您的属性提供简单的getter和setter。