我使用 Eclipselink 2.3.2 作为我的 JAXB (JSR-222)提供者。我创建了一个通用列表,其中包含一个项目列表和一组分页链接。
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "listdata")
public class ListEntity<T> {
@XmlElementRef
public List<T> data;
@XmlElementRef
public PaginationLinks links;
public ListEntity(List<T> data) {
this.data = data;
}
public ListEntity() {
}
}
我的实际实体
@XmlRootElement(name="authorization")
public class AuthorizationDTO {
@XmlElement
public String referenceNumber;
}
因此,在创建列表后,当我尝试对其进行编码时,出现以下错误。与@XmlElement 一起用于列表数据,但显然不能使用,因为它创建了对象表示
Caused by: Exception [EclipseLink-50006] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JAXBException
Exception Description: Invalid XmlElementRef on property data on class com.ofss.fc.botg.infra.model.ListEntity. Referenced Element not declared.
最佳答案
@XmlElementRef
注解有以下要求(见:http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementRef.html):
JAXBElement
,然后 @XmlElementRef.name()
和 @XmlElementRef.namespace()
必须指向一个带有 @XmlElementDecl
的元素工厂方法用 @XmlRegistry
注释的类中的注释(通常 ObjectFactory
由模式编译器生成的类):@XmlElementDecl.name()
必须等于 @XmlElementRef.name()
@XmlElementDecl.namespace()
必须等于 @XmlElementRef.namespace()
. JAXBElement
,那么属性或字段引用的类型必须用 @XmlRootElement
注释. 自
ListEntity
将作为类而不是类型处理 data
字段将被视为具有类型 Object
因此对 @XmlElementRef
的要求将不会满足导致您看到的异常。
关于jaxb - Eclipselink 和 @XmlRef 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17175391/