2013-06-18 1 views
5

Eclipselink 2.3.2를 내 JAXB (JSR-222) 공급자로 사용하고 있습니다. 나는 아이템리스트와 Pagination Links로 구성된 일반적인리스트를 만들었다. 내가 마샬 그것을하려고 할 때Eclipselink 및 @XmlRef 문제

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. 

답변

3

@XmlElementRef 주석이 다음과 같은 요구 사항이 개체 표현을 만들어으로 사용할 수 없습니다 (참조 : http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementRef.html를)

  • 컬렉션이 경우, 항목 유형 (컬렉션 속성의 경우) 또는 속성 유형 (단일 값 속성의 경우)이 JAXBElement 인 경우 @XmlElementRef.name()@XmlElementRef.namespace()은로 주석 된 클래스에서 @XmlElementDecl 주석이있는 요소 팩터 리 메서드를 가리켜 야합니다.(스키마 컴파일러에 의해 생성 일반적으로 ObjectFactory 클래스) :

    • @XmlElementDecl.name()@XmlElementRef.name()
    • @XmlElementDecl.namespace()@XmlElementRef.namespace() 동일해야 같아야합니다. (단일 값 속성에 대한) 또는 속성 유형 (컬렉션 속성) 컬렉션 항목 유형이 JAXBElement없는 경우
  • 는 다음 속성 또는 필드에서 참조 유형 @XmlRootElement 주석해야합니다. ListEntity 이후


data 필드는 예외 발생 형 Object 갖는 따라서 @XmlElementRef 대한 요구 사항이 충족되지 않으므로 처리하는 타입 클래스로 처리되지 않을 것임을 보고있다.