jaxb - Eclipselink 和 @XmlRef 的问题

标签 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() {
    }

}

我的实际实体

@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/

    相关文章:

    java - 抽象对象列表的 Jaxb 解码

    java - JPA 删除的实体在 JoinColumn 上重新创建实体

    jakarta-ee - 在@MappedSuperclass 中定义@UniqueConstraint

    java - MOXy 不导入它生成的其他模式

    JAXB 编译问题 - [错误] 属性 "Any"已定义

    java - Android 和 JAX-RS

    java - 有没有办法在解码到 Java 对象时替换无效的 XML 数据?

    java - JAXB 整理奇怪的行为

    jpa-2.0 - 使用 JAXB 进行灵活编码

    java - 使用 moxy 编码和解码更改 xml