IDRefs पर संपादित देख/keyrefs JAXB एनोटेशन में संभव होने लगते हैं, लेकिन रेफरी तत्व पाठ किया जा रहा समाप्त होता है।
मैं रेफरी को तत्व की विशेषता मानना चाहता हूं।
उदाहरण के लिए, इस ऑब्जेक्ट मॉडल दिया:
@XmlType
public class Employee {
@XmlID
@XmlAttribute
String name;
@XmlAttribute
int years;
@XmlAttribute
String foo;
}
@XmlType
public class Office {
@XmlAttribute
String name;
@XmlElementWrapper
@XmlElement(name = "employee")
List<Employee> employees;
}
@XmlRootElement
public class Company {
@XmlElementWrapper
@XmlElement(name = "office")
List<Office> offices;
@XmlElementWrapper
@XmlElement(name = "employee")
List<Employee> employees;
}
मैं externalized एक्सएमएल प्रारूप चाहते हैं इस तरह लग रही अंत में:
<company>
<offices>
<office name="nyc">
<employees>
<!--*** id ref to employee name ***-->
<employee ref="alice"/>
<employee ref="bob"/>
</employees>
</office>
<office name="sf">
<employees>
<employee ref="connie"/>
<employee ref="daphne"/>
</employees>
</office>
</offices>
<employees>
<!-- *** name is the id *** -->
<employee name="alice" years="3" foo="bar"/>
<employee name="bob" years="3" foo="bar"/>
<employee name="connie" years="3" foo="bar"/>
<employee name="daphne" years="3" foo="bar"/>
</employees>
</company>
इसके बजाय, सबसे अच्छा मैं कर सकता हूँ यह है (जावा कोड में ऊपर सूचीबद्ध एनोटेशन के साथ):
<company>
<offices>
<office name="nyc">
<employees>
<employee>alice</employee>
<employee>bob</employee>
</employees>
</office>
<office name="sf">
<employees>
<employee>connie</employee>
<employee>daphne</employee>
</employees>
</office>
</offices>
<employees>
<employee name="alice" years="3" foo="bar"/>
<employee name="bob" years="3" foo="bar"/>
<employee name="connie" years="3" foo="bar"/>
<employee name="daphne" years="3" foo="bar"/>
</employees>
</company>
क्या कोई तरीका है कि मैं idref को मजबूर कर सकता हूं तत्व बॉडी टेक्स्ट की बजाय कर्मचारी की विशेषता होने का मूल्य? मुझे पता है कि मैं इसे एक्सएमएल स्कीमा के साथ कर सकता हूं, लेकिन यदि संभव हो तो मैं एनोटेशन पर टिकना चाहूंगा।
धन्यवाद।
संपादित करें लगभग काम करता है, लेकिन यह कुछ परिस्थितियों में काफी काम नहीं करता है।
unmarshalling विफल रहता है अगर "कार्यालय" तत्व पहले (xml फ़ाइल में) "कर्मचारी" तत्वों का उल्लेख करते हैं जो कार्यालय संदर्भ हैं। कर्मचारी संदर्भ नहीं पाए जाते हैं, और कर्मचारी रिफ रैपर में एक शून्य कर्मचारी वस्तु है। यदि "कर्मचारी" पहले हैं, तो यह काम करता है।
यह एक समस्या का इतना अधिक नहीं होगा, लेकिन मार्शल विधि पहले "कार्यालय" रखेगी, ताकि अनचाहे करने की कोशिश की जा रही है जो अभी तक खराब हो गया है।
संपादित करें 2 टिप्पणी में टोरियस 'उत्तर में ऑर्डरिंग समस्या हल होती है।
yup, यह चाल है। धन्यवाद। – marathon
ठीक है, यह कुछ (अधिकांश) परिस्थितियों में काफी काम नहीं करता है। – marathon
ऊपर संपादित करें देखें '@XmlType (propOrder = {"staff", "office"} के साथ' कंपनी' क्लास को एनोटेट करें) 'मार्शलिंग के दौरान वांछित क्रम को मजबूर करने के लिए। – Torious