javax.ws.rs.WebApplicationException:javax.xml.bind.jaxbeexception与链接的异常类[Ljava.lang.Object;

javax.ws.rs.WebApplicationException:javax.xml.bind.jaxbeexception与链接的异常类[Ljava.lang.Object;,java,hibernate,rest,jpa,jersey,Java,Hibernate,Rest,Jpa,Jersey,当我执行REST服务方法时,我得到以下异常,我如何解决这个问题?不确定是哪个class[Ljava.lang.Object 任何帮助都是值得赞赏的 javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.SAXException2: class [Ljava.lang.Object; nor any of its super cla

当我执行REST服务方法时,我得到以下异常,我如何解决这个问题?不确定是哪个
class[Ljava.lang.Object
任何帮助都是值得赞赏的

javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: class [Ljava.lang.Object; nor any of its super 
class is known to this context.
javax.xml.bind.JAXBException: class [Ljava.lang.Object; nor any of its super
class is known to this context.]
at 
com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo
(AbstractRootElementProvider.java:155)
at com.sun.jersey.spi.container.ContainerResponse.write
(ContainerResponse.java:306)
Emp实体

@XmlRootElement
@Entity
@Table(name = "EMP")
@XmlSeeAlso({Emp.class})
@NamedQueries({
    @NamedQuery(name = "Emp.findAllEmployees", query = "select e.empno AS empno,e.ename AS ename,e.job as job,e.mgr AS mgr,e.sal AS sal,e.comm as comm,e.dept.deptno as deptno  from Emp e left join e.dept  order by e.empno desc")
})
public class Emp implements java.io.Serializable {

    private short empno;
    private Dept dept;
    private String ename;
    private String job;
    private Short mgr;
    private Date hiredate;
    private Integer sal;
    private Integer comm;

    public Emp() {
    }

    public Emp(short empno) {
        this.empno = empno;
    }

    public Emp(short empno, String ename, Dept dept, String job, Short mgr, Date hiredate, Integer sal, Integer comm) {
        this.empno = empno;
        this.dept = dept;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
        this.sal = sal;
        this.comm = comm;
    }

    @Id
    @Column(name = "EMPNO", unique = true, nullable = false, precision = 4, scale = 0)
    public short getEmpno() {
        return this.empno;
    }

    public void setEmpno(short empno) {
        this.empno = empno;
    }

    @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.MERGE)
    @JoinColumn(name = "DEPTNO")
    public Dept getDept() {
        return this.dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Column(name = "ENAME", length = 10)
    public String getEname() {
        return this.ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    @Column(name = "JOB", length = 9)
    public String getJob() {
        return this.job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Column(name = "MGR", precision = 4, scale = 0)
    public Short getMgr() {
        return this.mgr;
    }

    public void setMgr(Short mgr) {
        this.mgr = mgr;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "HIREDATE", length = 7)
    public Date getHiredate() {
        return this.hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    @Column(name = "SAL", precision = 7)
    public Integer getSal() {
        return this.sal;
    }

    public void setSal(Integer sal) {
        this.sal = sal;
    }

    @Column(name = "COMM", precision = 7)
    public Integer getComm() {
        return this.comm;
    }

    public void setComm(Integer comm) {
        this.comm = comm;
    }

}
@XmlRootElement
@XmlSeeAlso({Dept.class})
@Entity
@Table(name="DEPT")
public class Dept  implements java.io.Serializable {

     private byte deptno;
     private String dname;
     private String loc;
     private Set emps = new HashSet(0);

    public Dept() {
    }


    public Dept(byte deptno) {
        this.deptno = deptno;
    }
    public Dept(byte deptno, String dname, String loc, Set emps) {
       this.deptno = deptno;
       this.dname = dname;
       this.loc = loc;
       this.emps = emps;
    }

     @Id   
    @Column(name="DEPTNO", unique=true, nullable=false, precision=2, scale=0)
    public byte getDeptno() {
        return this.deptno;
    }

    public void setDeptno(byte deptno) {
        this.deptno = deptno;
    }


    @Column(name="DNAME", length=14)
    public String getDname() {
        return this.dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }


    @Column(name="LOC", length=13)
    public String getLoc() {
        return this.loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept")
public Set<Emp> getEmps() {
    return this.emps;
}

    public void setEmps(Set emps) {
        this.emps = emps;
    }

}
部门实体

@XmlRootElement
@Entity
@Table(name = "EMP")
@XmlSeeAlso({Emp.class})
@NamedQueries({
    @NamedQuery(name = "Emp.findAllEmployees", query = "select e.empno AS empno,e.ename AS ename,e.job as job,e.mgr AS mgr,e.sal AS sal,e.comm as comm,e.dept.deptno as deptno  from Emp e left join e.dept  order by e.empno desc")
})
public class Emp implements java.io.Serializable {

    private short empno;
    private Dept dept;
    private String ename;
    private String job;
    private Short mgr;
    private Date hiredate;
    private Integer sal;
    private Integer comm;

    public Emp() {
    }

    public Emp(short empno) {
        this.empno = empno;
    }

    public Emp(short empno, String ename, Dept dept, String job, Short mgr, Date hiredate, Integer sal, Integer comm) {
        this.empno = empno;
        this.dept = dept;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
        this.sal = sal;
        this.comm = comm;
    }

    @Id
    @Column(name = "EMPNO", unique = true, nullable = false, precision = 4, scale = 0)
    public short getEmpno() {
        return this.empno;
    }

    public void setEmpno(short empno) {
        this.empno = empno;
    }

    @ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.MERGE)
    @JoinColumn(name = "DEPTNO")
    public Dept getDept() {
        return this.dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Column(name = "ENAME", length = 10)
    public String getEname() {
        return this.ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    @Column(name = "JOB", length = 9)
    public String getJob() {
        return this.job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Column(name = "MGR", precision = 4, scale = 0)
    public Short getMgr() {
        return this.mgr;
    }

    public void setMgr(Short mgr) {
        this.mgr = mgr;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "HIREDATE", length = 7)
    public Date getHiredate() {
        return this.hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    @Column(name = "SAL", precision = 7)
    public Integer getSal() {
        return this.sal;
    }

    public void setSal(Integer sal) {
        this.sal = sal;
    }

    @Column(name = "COMM", precision = 7)
    public Integer getComm() {
        return this.comm;
    }

    public void setComm(Integer comm) {
        this.comm = comm;
    }

}
@XmlRootElement
@XmlSeeAlso({Dept.class})
@Entity
@Table(name="DEPT")
public class Dept  implements java.io.Serializable {

     private byte deptno;
     private String dname;
     private String loc;
     private Set emps = new HashSet(0);

    public Dept() {
    }


    public Dept(byte deptno) {
        this.deptno = deptno;
    }
    public Dept(byte deptno, String dname, String loc, Set emps) {
       this.deptno = deptno;
       this.dname = dname;
       this.loc = loc;
       this.emps = emps;
    }

     @Id   
    @Column(name="DEPTNO", unique=true, nullable=false, precision=2, scale=0)
    public byte getDeptno() {
        return this.deptno;
    }

    public void setDeptno(byte deptno) {
        this.deptno = deptno;
    }


    @Column(name="DNAME", length=14)
    public String getDname() {
        return this.dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }


    @Column(name="LOC", length=13)
    public String getLoc() {
        return this.loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

@OneToMany(fetch=FetchType.LAZY, mappedBy="dept")
public Set<Emp> getEmps() {
    return this.emps;
}

    public void setEmps(Set emps) {
        this.emps = emps;
    }

}

问题似乎是JAX无法将列表封送到XML。您已为Emp类正确定义了XML绑定。可能是JAXB无法处理这些对象的集合。请尝试以下操作:

1) 围绕Emp引入一个包装器类

@XmlRootElement(name="Employess")
public class EmpList {

   private List<Emp> emps = new ArrayList<Emp>();

   public void setEmpList(List<Emp> facpList) {
      this.emps = facpList;
   }

   @XmlElement(name="Emp")
   public List<Emp> getEmpList() {
      return emps;
   }
}

顺便说一句,这只是一种可能性。也可能是某些嵌套属性不可解析。也就是说,Emp可能有一个属性是具有问题属性的对象。由于您尚未发布所有类的完整源代码,我只能猜测可能是这样。我用实体类代码Emp和部门。我尝试了您的解决方案,其中一个问题是
response.setPayload(emps);
不兼容。因此我转换为
response.setPayload((列表)emps)
whcih导致
java.lang.ClassCastException:test.entity.EmpList无法转换为java.util.List
不确定如何解决此问题。我做了另一个更改,将
负载声明为私有对象负载;
在REST方法中,我做了
响应.setPayload(emps)现在的问题是以下异常
javax.ws.rs.WebApplicationException:javax.xml.bind.MarshalException-带有链接的异常:[com.sun.istack.SAXException2:class test.entity.EmpList,它的任何超类在此上下文中都不为人所知。
即使我有
@xmlseeald(EmpList.class)
员工列表中定义
您找到了解决此问题的方法吗?我遇到了与此场景完全相同的错误
@XmlRootElement(name="Employess")
public class EmpList {

   private List<Emp> emps = new ArrayList<Emp>();

   public void setEmpList(List<Emp> facpList) {
      this.emps = facpList;
   }

   @XmlElement(name="Emp")
   public List<Emp> getEmpList() {
      return emps;
   }
}
EmpList emps = new EmpList();
emps.setEmpList(getEmployeeService().findAllEmployees());
response.setPayload(emps);