0

我正在编写一个 REST 资源,但我遇到了一个对象问题

@Entity
@Table(name = "TABLE_A")
@XmlRootElement(name = "typeA")
public class TypeA implements GenericType{

@Id
@Column(name = "COLUMN_ID")
@GeneratedValue
private Integer id;

@OneToMany (mappedBy="person")
private List<TypeB> typeBList;

@XmlAttribute
public Integer getId() {
    return id;
}

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

@XmlElement(name="mytypes")
public List<TypeB> getTypeBList() {
    return typeBList;
}

public void setTypeBList(List<TypeB> typeBList) {
    this.typeBList = typeBList;
}
}

该接口没有任何注释。

这是提供服务的资源

@Path("user/{id}")
public class PersonResourceImpl {

@GET
@Produces({MediaType.APPLICATION_XML})
public TypeA getPerson(@PathParam("id") String id) {
    LOG.info("doGetPerson() - IN");

    ... get from a datasource ...

    return retrievedPerson;
}

当我尝试使用此资源时,会从数据库返回正确的对象,但是当它尝试将其编组为 xml 时,它会因找不到类的消息正文编写器和 MIME 类型 application/xml 而失败

这就是我必须为其他对象做的所有事情并且它们可以工作,我唯一没有做的就是@XmlAttribute 标记,也许那里有问题?

谢谢

4

1 回答 1

0

这是由我使用 Hibernate 的方式引起的。我正在从数据库加载对象并将其返回到我的 Rest 资源,当时我执行 null 检查该资源是否仍然可用。

当 JAXB 尝试编组此对象时,它失败了,要么该对象已更改并且不再可用,要么在 hibernate 创建它时它没有正确的注释。

我通过创建一个新对象并使用来自一个休眠返回的数据加载它来解决这个问题。

于 2012-09-03T09:17:28.857 回答