public abstract class Parent<T> {
protected List<T> list;
@XmlTransient //Question why do we have to give this here?
public abstract List<T> getList();
public abstract void setList(List<T> list);
}
@XmlRootElement(name = "child1")
class Child1 extends Parent<ExtendedElement1>{
@Override
public void setList(List<ExtendedElement1> list){
this.list = list;
}
@Override
@XmlElementWrapper(name = "child1-list")
@XmlElement(name = "child-list-element")
public List<ExtendedElement1> getList(){
return this.list;
}
}
@XmlRootElement(name = "child2")
class Child2 extends Parent<ExtendedElement2>{
@Override
public void setList(List<ExtendedElement2> list){
this.list = list;
}
@Override
@XmlElementWrapper(name = "child1-list")
@XmlElement(name = "child-list-element")
public List<ExtendedElement2> getList(){
return this.list;
}
}
class Element{
@XmlElement(name = "integer", type = int.class)
private int i = 2;
}
class ExtendedElement1 extends Element{
@XmlElement(name = "extended-element1-str", type = String.class)
private String str = "hello";
}
class ExtendedElement2 extends Element{
@XmlElement(name = "extended-element2-str", type = String.class)
private String str1 = "hello_there";
}
मैं उदाहरण है जब मैं Parent
वर्ग getList()
विधि से@XmlTransient
हटाने , निम्नलिखित एक्सएमएल मार्शल में पता चला है के रूप में:विरासत और जेएक्सबी एक साथ कैसे काम करते हैं?
<child1>
<!-- List is serialized 2 times -->
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="extendedElement1">
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</list>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="extendedElement1">
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</list>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="extendedElement1">
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</list>
<child1-list>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
</child1-list>
</child1>
लेकिन जब मैं@XmlTransient
टिप्पणी जोड़ने, के रूप में उदाहरण के लिए xml को केवल एक सूची के साथ क्रमबद्ध किया गया है।
<child1>
<child1-list>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
<child-list-element>
<integer>2</integer>
<extended-element1-str>hello</extended-element1-str>
</child-list-element>
</child1-list>
</child1>
इसलिए कृपया कोई मुझे समझा सकता है क्यों यह जनक कक्षा गेटर विधि में @XmlTransient
देने के लिए आवश्यक है? इन मामलों के लिए विरासत और जेएक्सबी कैसे संबंधित हैं?
लेकिन क्या होगा अगर आप एक सार्वजनिक एपीआई को डिजाइन कर रहे हैं? क्या एनोटेशन का डिफ़ॉल्ट सेट प्रदान करने का कोई तरीका है, और उन्हें अतिसंवेदनशील बनाते हैं? मुझे यह धारणा मिल रही है कि ऐसा करने का कोई तरीका नहीं है, क्या मैं सही हूँ? देखें: http://stackoverflow.com/questions/38348083/jaxb-override-xmlelement-type-of-list – bvdb