2013-06-18 20 views
5

Ich benutze Eclipselink 2.3.2 als meine JAXB (JSR-222) Anbieter. Ich habe eine generische Liste erstellt, die aus einer Liste von Elementen und einer Reihe von Seitenumbruch-Links besteht.Problem mit Eclipselink und @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() { 
    } 

} 

Meine eigentliche Entity

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

    @XmlElement 
    public String referenceNumber; 

} 

So, nach Erstellung der Liste, wenn ich zu marshall versuche es, erhalte ich die folgende Fehlermeldung. Funktioniert mit @XmlElement für die Datenliste, aber offensichtlich nicht verwendet werden kann, wie es die Darstellung Objekt erzeugt

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. 

Antwort

3

Die @XmlElementRef Anmerkung die folgenden Anforderungen (siehe: http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementRef.html):

  • Wenn die Sammlung Elementtyp (für Collection-Eigenschaft) oder Property-Typ (für Single-Value-Eigenschaft) ist JAXBElement, dann @XmlElementRef.name() und @XmlElementRef.namespace() müssen eine Element Factory-Methode mit einer @XmlElementDecl Annotation in einer Klasse mitkommentiert(in der Regel ObjectFactory Klasse vom Schema-Compiler generiert):

    • @XmlElementDecl.name() muss gleich @XmlElementRef.name()
    • @XmlElementDecl.namespace() muss @XmlElementRef.namespace() gleich.
  • Wenn der Sammlung Elementtyp (abhol Eigenschaft) oder Art der Unterkunft (für einzelwertige Eigenschaft) nicht JAXBElement ist, dann ist der Typ von der Eigenschaft oder ein Feld verwiesen wird, muß mit @XmlRootElement kommentiert werden.


Seit ListEntity wird als Klasse verarbeitet werden und nicht eine Art der data Feld als Typ mit behandelt werden Object und damit die Voraussetzungen für @XmlElementRef wird in Ausnahme nicht erfüllt sind was, dass man sehen.

Verwandte Themen