2011-03-22 13 views
6

मुझे जेएक्सबी का उपयोग करके जावा में पेरेंट क्लास और चाइल्ड क्लास कक्षाएं कक्षाएं हैं। चाइल्ड क्लास पेरेंट क्लास बढ़ाता है। जब मैं बाल क्लास के किसी ऑब्जेक्ट को क्रमबद्ध करता हूं, परिणामी एक्सएमएल में, ParentClass गुण पहले दिखाई देते हैं, तो मैं पहले चाइल्ड क्लास गुणों और फिर ParentClass गुणों को देखना चाहता हूं।जावा क्रमबद्धता में ऑर्डर एक्सएमएल सुपरक्लास तत्व

क्या यह संभव है?

आप

उत्तर

9

कारण JAXB इस XML स्कीमा में विरासत मिलान करने के लिए है है धन्यवाद। हालांकि, अगर आप की तरह कुछ कर सकता है निम्नलिखित:

  • मार्क माता पिता @XmlTransient
  • बच्चे वर्ग

जनक

import javax.xml.bind.annotation.XmlTransient; 

@XmlTransient 
public abstract class Parent { 

    private String parentProp; 

    public String getParentProp() { 
     return parentProp; 
    } 

    public void setParentProp(String parentProp) { 
     this.parentProp = parentProp; 
    } 

} 

बाल पर propOrder सेट

import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlRootElement 
@XmlType(propOrder={"childProp", "parentProp"}) 
public class Child extends Parent { 

    private String childProp; 

    public String getChildProp() { 
     return childProp; 
    } 

    public void setChildProp(String childProp) { 
     this.childProp = childProp; 
    } 

} 

डेमो

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Child.class); 

     Child child = new Child(); 
     child.setParentProp("parent-value"); 
     child.setChildProp("child-value"); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(child, System.out); 
    } 

} 

आउटपुट

<child> 
    <childProp>child-value</childProp> 
    <parentProp>parent-value</parentProp> 
</child> 
+0

शांत जवाब, 1। क्या यह स्कीमा सत्यापन के साथ काम करता है (जब unmarshalling)? 2. यह @XmlTransient के साथ काम करेगा लेकिन प्रोपॉर्डर – ekeren

+1

@ekeren के बिना - 1. जटिल प्रकारों के बीच विरासत होने पर एक्सएमएल स्कीमा कैसा दिखता है, इस पर निर्भर करता है कि यह अपेक्षा की जाती है कि मूल प्रकार के गुण बच्चे के प्रकार गुणों से पहले होते हैं। 2. हां, लेकिन बिना समर्थक के आदेश आदेश JAXB प्रत्यारोपण पर निर्भर है। –

+0

@BlaiseDoughan बच्चे के गुणों को पहले हार्टकोडिंग मूल गुणों के बिना रखने का एक और तरीका है? इन बाल एनोटेशन की तरह एनोटेशन होने के कारण, यह ओओपी प्रतिमान का थोड़ा सा उल्लंघन करता है ... मैं एक्लिप्ससेंक मोक्सी – basZero

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