2013-06-18 27 views
5

Eclipselink 2.3.2, JAXB (JSR-222) sağlayıcım olarak kullanıyorum. Öğelerin bir listesi ve bir dizi Sayfalandırma Bağlantısından oluşan genel bir liste oluşturdum. Ben Marshall'a o çalıştığınızdaEklipselink ve @XmlRef ile sorun

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

} 

Benim asıl Varlık

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

    @XmlElement 
    public String referenceNumber; 

} 

Yani, listenin oluşturulmasından sonra, aşağıdaki hatayı alıyorum. Liste verileri için @XmlElement ile çalışıyor ancak açıkçası

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. 

cevap

3

@XmlElementRef açıklama aşağıdaki gereksinimleri vardır Nesne temsilini oluşturur olarak kullanılamaz (bkz: http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementRef.html):

  • koleksiyonu ise öğe türü (toplama özelliği için) veya özellik türü (tek değerli özellik için) JAXBElement, sonra @XmlElementRef.name() ve @XmlElementRef.namespace(), @XmlElementDecl ek açıklamasının bir öğe fabrika yönteminiile açıklanmış bir sınıfta işaretlemelidir(Şema derleyici tarafından üretilen, genellikle ObjectFactory sınıfı):

    • @XmlElementDecl.name()@XmlElementRef.name()
    • @XmlElementDecl.namespace()@XmlElementRef.namespace() eşit olmalıdır eşit olmalıdır. (Tek değerli özellik için) ya da özellik türü (toplama özelliği için) koleksiyon öğesi türü JAXBElement değilse
  • , ardından mülkiyet veya alan tarafından başvurulan tip @XmlRootElement ile açıklamalı olmalıdır. ListEntity yana


data alan istisna ile sonuçlanan tip Object sahip ve bu nedenle @XmlElementRef için gereklilikler yerine getirilmiş olmaz olarak kabul edilecek bir tür bir sınıf olarak işlenip edilmeyecektir sizi görüyorlar.