आप कम से कम 5 मिनट में XML और जावा के लिए एक्सएमएल के लिए जावा कोडिंग शुरू करने के लिए चाहते हैं, सरल एक्सएमएल क्रमबद्धता का प्रयास करें। JAXB एपीआई सीखने घंटे खर्च मत करो http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php
हालांकि, अगर आप JAXB सीखने पर वास्तव में चाहते हैं, यहाँ एक उत्कृष्ट ट्यूटोरियल है ट्यूटोरियल के http://blogs.oracle.com/teera/entry/jaxb_for_simple_java_xml
सामग्री:
सरल के लिए JAXB जावा-एक्सएमएल क्रमबद्धता
जावा में एक्सएमएल क्रमबद्ध करने के कई तरीके हैं। यदि आप पार्सिंग और क्रमबद्धता पर बढ़िया नियंत्रण चाहते हैं तो आप बेहतर प्रदर्शन के लिए SAX, DOM, या Stax के लिए जा सकते हैं। फिर भी, जो मैं अक्सर करना चाहता हूं वह पीओजेओ और एक्सएमएल के बीच एक सरल मैपिंग है। हालांकि, एक्सएमएल इवेंट पार्सिंग मैन्युअल रूप से करने के लिए जावा क्लासेस बनाना मुश्किल नहीं है। मैंने हाल ही में जेएक्सबी को एक त्वरित और सुविधाजनक जावा-एक्सएमएल मैपिंग या सीरियलाइजेशन पाया है।
जेएक्सबी में बहुत सारी उपयोगी विशेषताएं हैं, आप यहां संदर्भ कार्यान्वयन की जांच कर सकते हैं। Kohsuke's Blog जेएक्सबी के बारे में अधिक जानने के लिए भी एक अच्छा संसाधन है। इस ब्लॉग एंट्री के लिए, मैं आपको दिखाऊंगा कि जेएक्सबी के साथ एक सरल जावा-एक्सएमएल सीरियलाइजेशन कैसे करें। एक्सएमएल को
POJO
मान लीजिए मैं एक आइटम जावा वस्तु है। मैं एक आइटम ऑब्जेक्ट को एक्सएमएल प्रारूप में क्रमबद्ध करना चाहता हूं। मुझे पहले क्या करना है इस पीओजेओ को javax.xml.bind.annotation से कुछ एक्सएमएल एनोटेशन के साथ एनोटेट करना है। * पैकेज। आइटम के लिए कोड प्रविष्टि 1 देखें।जावा
कोड
@XmlRootElement(name="Item")
से पता चलता है कि मैं मूल तत्व होना चाहता हूँ।
@XmlType(propOrder = {"name", "price"})
ऑर्डर को इंगित करता है कि मैं XML आउटपुट में तत्व को व्यवस्थित करना चाहता हूं।
@XmlAttribute(name="id", ...)
इंगित करता है कि आईडी रूट तत्व के लिए एक विशेषता है।
@XmlElement(....)
इंगित करता है कि मुझे मूल्य और नाम आइटम के भीतर तत्व होना चाहिए।
मेरा Item.java
तैयार है। मैं आगे बढ़ सकता हूं और मार्शलिंग आइटम के लिए जेएक्सबी स्क्रिप्ट बना सकता हूं।
//creating Item data object
Item item = new Item();
item.setId(2);
item.setName("Foo");
item.setPrice(200);
.....
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
//I want to save the output file to item.xml
marshaller.marshal(item, new FileWriter("item.xml"));
पूर्ण कोड लिस्टिंग के लिए कृपया कोड लिस्टिंग 2 main.java
देखें। आउटपुट कोड लिस्टिंग 3 item.xml
फ़ाइल बनाई गई है। ऐसा लगता है:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:item ns1:id="2" xmlns:ns1="http://blogs.sun.com/teera/ns/item">
<ns1:itemName>Foo</ns1:itemName>
<ns1:price>200</ns1:price>
</ns1:item>
आसान है? आप वैकल्पिक रूप से पाठ स्ट्रिंग, स्ट्रीम, लेखक, ContentHandler, आदि के रूप में उत्पादन एक्सएमएल बस द्वारा चैनल कर सकते हैं POJO को
आइए तरह
...
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
// save xml output to the OutputStream instance
marshaller.marshal(item, <java.io.OutputStream instance>);
...
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
//save to StringWriter, you can then call sw.toString() to get java.lang.String
marshaller.marshal(item, sw);
एक्सएमएल विधि मार्शल (...) के मानदंड को बदलना प्रक्रिया को उलट दें। मान लें कि अब मेरे पास XML स्ट्रिंग डेटा का एक टुकड़ा है और मैं इसे Item.java ऑब्जेक्ट में बदलना चाहता हूं। XML डेटा (कोड लिस्टिंग 3) मैं तो unmarshal इस एक्सएमएल द्वारा
...
ByteArrayInputStream xmlContentBytes = new ByteArrayInputStream (xmlContent.getBytes());
JAXBContext context = JAXBContext.newInstance(Item.getClass());
Unmarshaller unmarshaller = context.createUnmarshaller();
//note: setting schema to null will turn validator off
unmarshaller.setSchema(null);
Object xmlObject = Item.getClass().cast(unmarshaller.unmarshal(xmlContentBytes));
return xmlObject;
...
मद वस्तु के लिए कोड पूरा कोड के लिए लिस्टिंग कर सकते हैं
तरह <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:item ns1:id="2" xmlns:ns1="http://blogs.sun.com/teera/ns/item">
<ns1:itemName>Bar</ns1:itemName>
<ns1:price>80</ns1:price>
</ns1:item>
कृपया कोड लिस्टिंग 2 (main.java) देख लग रहा है। एक्सएमएल स्रोत स्ट्रीम और फाइल दोनों से कई रूपों में आ सकता है। फर्क सिर्फ इतना है, फिर से, विधि पैरामीटर है:
...
unmarshaller.unmarshal(new File("Item.xml")); // reading from file
...
// inputStream is an instance of java.io.InputStream, reading from stream
unmarshaller.unmarshal(inputStream);
XML स्कीमा के साथ मान्यता
अंतिम बात मैं यहाँ उल्लेख करना चाहते हैं जावा वस्तु के लिए unmarshalling से पहले स्कीमा के साथ इनपुट XML मान्य है। मैं item.xsd नामक एक एक्सएमएल स्कीमा फ़ाइल बनाता हूं। पूर्ण कोड लिस्टिंग के लिए कृपया कोड लिस्टिंग 4 (Item.xsd) देखें। अब मुझे क्या करना है सत्यापन के लिए इस स्कीमा को पंजीकृत करना है।
...
Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
.newSchema(new File("Item.xsd"));
unmarshaller.setSchema(schema); //register item.xsd shcema for validation
...
मैं POJO को unmarshal XML डेटा करने का प्रयास करते हैं, अगर इनपुट XML स्कीमा पुष्टि नहीं है, अपवाद पकड़ा दिया जाएगा। पूर्ण कोड लिस्टिंग के लिए कृपया कोड लिस्टिंग 5 (invalid_item.xml) देखें।
javax.xml.bind.UnmarshalException
- with linked exception:
javax.xml.bind.JAXBException caught: null
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: 'item1' is
not a valid value for 'integer'.]
यहां मैं पूर्णांक की बजाय स्ट्रिंग में 'आईडी' विशेषता बदलता हूं।
यदि एक्सएमएल इनपुट स्कीमा के खिलाफ मान्य है, तो एक्सएमएल डेटा आइटम.जावा ऑब्जेक्ट को सफलतापूर्वक अनारक्षित कर दिया जाएगा।
यदि आप मैन्युअल पीढ़ी चाहते हैं, तो अपनी ग्रहण परियोजना में .xsd फ़ाइल रखें, फ़ाइल पर राइट क्लिक करें, फिर "उत्पन्न करें" –