साथ वैकल्पिक का उपयोग करते हुए मैं सेटअप एक JAXB-एनोटेट जावा वर्ग चाहते निम्न स्वरूप में कुछ एक्सएमएल उत्पन्न करने के लिए होगा:अमरूद के @XmlAttribute
<page refId="0001">
<title>The title of my page</title>
</page>
"refId" क्षेत्र वैकल्पिक है, तो मैं करना चाहते हैं मेमोरी में स्ट्रिंग को संदर्भित करने के लिए अमरूद के वैकल्पिक निर्माण का उपयोग करें। मैं Using generic @XmlJavaTypeAdapter to unmarshal wrapped in Guava's Optional देखता हूं, जो एक संपूर्ण उदाहरण देता है यदि आप तत्व का उपयोग कर रहे हैं (भले ही वह मूल प्रश्न न हो), लेकिन आप XML विशेषता के लिए एनोटेशन कैसे सेट अप करेंगे?
@XmlRootElement(name="page")
public final class Page {
@XmlAttribute
@XmlJavaTypeAdapter(OptionalAdapter.class)
private Optional<String> refId;
@XmlElement
private String title;
... getters/setters, default constructor, etc.
}
और OptionalAdapter एक सरल XmlAdapter है:
public class OptionalAdapter<T> extends XmlAdapter<T, Optional<T>> {
@Override
public Optional<T> unmarshal(T v) throws Exception {
return Optional.fromNullable(v);
}
@Override
public T marshal(Optional<T> v) throws Exception {
if (v == null || !v.isPresent()) {
return null;
} else {
return v.get();
}
}
}
जब मैं ऊपर कोड के खिलाफ एक इकाई परीक्षण को लोड करने की कोशिश, यह तुरंत दौरान विफल रहता है
यहाँ मैं अब तक राशि है प्रारंभिकरण, लेकिन अगर मैं एनोटेशन को @XmlElement में बदलता हूं, तो परीक्षण चलाएगा और पास होगा, लेकिन स्पष्ट रूप से एक विशेषता के बजाय एक बच्चे तत्व के रूप में refId सेट करता है।
अग्रिम धन्यवाद!