2013-06-18 4 views
5

के साथ समस्या मैं अपने JAXB (JSR-222) प्रदाता के रूप में Eclipselink 2.3.2 का उपयोग कर रहा हूं। मैंने एक सामान्य सूची बनाई है जिसमें वस्तुओं की एक सूची और पेजिनेशन लिंक का एक सेट शामिल है।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 के लिए आवश्यकताओं को पूरा किया गया है नहीं होगा माना जाएगा कि आप देख रहे हैं।

संबंधित मुद्दे