नोट: मैं EclipseLink JAXB (MOXy) नेतृत्व और JAXB (JSR-222) विशेषज्ञ समूह का सदस्य हूँ।
निम्नलिखित उदाहरण के लिए MOXy के उपयोग को JAXB प्रदाता के रूप में उपयोग करने की आवश्यकता है। ऐसा इसलिए है क्योंकि जब क्षेत्र/संपत्ति शून्य है तो JAXB RI XmlAdapter
पर कॉल नहीं करता है। MOXY अपने JAXB प्रदाता के रूप में निर्दिष्ट करने के बारे में जानकारी के लिए देखें:
StringAdapter
XmlAdapter
एक संपत्ति @XmlValue
साथ एनोटेट के साथ एक वस्तु के लिए स्ट्रिंग मान परिवर्तित कर देंगे।
package forum8986842;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class StringAdapter extends XmlAdapter<StringAdapter.AdaptedString, String>{
@Override
public String unmarshal(AdaptedString adaptedString) throws Exception {
if(null == adaptedString) {
return null;
}
String string = adaptedString.value;
if("".equals(string)) {
return null;
}
return string;
}
@Override
public AdaptedString marshal(String string) throws Exception {
AdaptedString adaptedString = new AdaptedString();
adaptedString.value = string;
return adaptedString;
}
public static class AdaptedString {
@XmlValue public String value;
}
}
रूट
@XmlJavaTypeAdapter
एनोटेशन निर्दिष्ट करने के लिए प्रयोग किया जाता है XmlAdapter
:
package forum8986842;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name="Root")
public class Root {
private String item;
@XmlElement(name = "Item", required = true, nillable = true)
@XmlJavaTypeAdapter(StringAdapter.class)
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
डेमो
निम्नलिखित कोड ऊपर मानचित्रण प्रदर्शित करने के लिए इस्तेमाल किया जा सकता। दो दस्तावेज़ों का उपयोग खाली Item
तत्व के साथ किया जाता है, और दूसरा एक जनसंख्या Item
तत्व के साथ।
package forum8986842;
import java.io.StringReader;
import javax.xml.bind.*;
public class Demo {
private JAXBContext jc;
public Demo() throws JAXBException {
jc = JAXBContext.newInstance(Root.class);
}
public static void main(String[] args) throws Exception {
Demo demo = new Demo();
demo.demo("<Root><Item/></Root>");
demo.demo("<Root><Item>Hello World</Item></Root>");
}
private void demo(String xml) throws JAXBException {
System.out.println("\n\nINPUT: " + xml);
StringReader stringReader = new StringReader(xml);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Root root = (Root) unmarshaller.unmarshal(stringReader);
System.out.println("ITEM: " + root.getItem());
System.out.print("OUTPUT: ");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(root, System.out);
}
}
आउटपुट
निम्नलिखित है डेमो कोड को चलने से उत्पादन:
INPUT: <Root><Item/></Root>
ITEM: null
OUTPUT: <Root><Item/></Root>
INPUT: <Root><Item>Hello World</Item></Root>
ITEM: Hello World
OUTPUT: <Root><Item>Hello World</Item></Root>
अधिक जानकारी के लिए
स्रोत
2012-01-24 20:29:56