Eclipselink和@XmlRef的问题

use*_*717 5 jaxb eclipselink moxy

我使用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() {
    }

}
Run Code Online (Sandbox Code Playgroud)

我的实际实体

@XmlRootElement(name="authorization")
public class AuthorizationDTO {

    @XmlElement 
    public String referenceNumber;

} 
Run Code Online (Sandbox Code Playgroud)

因此,在创建列表后,当我尝试编组它时,我收到以下错误.适用于List数据的@XmlElement可以正常工作,但显然无法使用,因为它会创建Object表示

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.
Run Code Online (Sandbox Code Playgroud)

bdo*_*han 5

@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