.NET के एक्सएमएल क्रमांकन का जावा एनालॉग क्या है?
.NET के एक्सएमएल क्रमांकन का जावा एनालॉग क्या है?
जवाबों:
2008 उत्तर "आधिकारिक" जावा एपीआई इसके लिए अब XML बाइंडिंग के लिए JAXB - जावा एपीआई है। ओरेकल द्वारा ट्यूटोरियल देखें । संदर्भ कार्यान्वयन http://jaxb.java.net/ पर रहता है
2018 अपडेट नोट करें कि जावा ईई और कोरा मॉड्यूल को जेडीके 9 में एसई में अपदस्थ किया गया है और जेडीके 11 में एसई से हटा दिया जाना है । इसलिए, JAXB का उपयोग करने के लिए या तो यह आपके मौजूदा एंटरप्राइज़ वर्ग के वातावरण में होना चाहिए, जो आपके उदाहरण के लिए ऐप सर्वर द्वारा बंडल किया गया है, या आपको इसे मैन्युअल रूप से लाने की आवश्यकता होगी।
XStream बहुत विन्यास और पैसे के बिना XML के लिए ऑब्जेक्ट को क्रमबद्ध करने में बहुत अच्छा है! (यह बीएसडी लाइसेंस के तहत है)।
हमने सादे पुराने जावा-क्रमांकन को बदलने के लिए अपनी परियोजना में इसका इस्तेमाल किया और इसने लगभग बॉक्स से बाहर काम किया।
आप साधारण XML सरलीकरण परियोजना को देखना चाहते हैं । यह सबसे पास की चीज़ है जो मैंने System.Xml.Serialization में .Net पर पाया है।
JAXB JDK मानक संस्करण संस्करण 1.6+ का हिस्सा है। तो यह FREE
डाउनलोड करने और प्रबंधन करने के लिए कोई अतिरिक्त पुस्तकालय नहीं है। एक सरल उदाहरण यहां पाया जा सकता है
XStream लगता है मर गया। अंतिम अद्यतन 6 दिसंबर 2008 को हुआ था।
Simple
JAXB के रूप में आसान और सरल लगता है लेकिन मुझे उद्यम उपयोग के लिए इसका मूल्यांकन करने के लिए कोई लाइसेंसिंग जानकारी नहीं मिली।
वर्थ उल्लेख करते हुए कि संस्करण 1.4 के बाद से, जावा में java.beans.XMLEncoder और java.beans.XMLDecoder की कक्षाएं थीं। ये कक्षाएं XML एन्कोडिंग का प्रदर्शन करती हैं जो कम से कम XML Serialization के लिए तुलनीय है और कुछ परिस्थितियों में आपके लिए ट्रिक कर सकती है।
यदि आपका वर्ग अपने गेटर्स और सेटर के लिए जावाबिन स्पेसिफिकेशन से चिपक जाता है, तो यह विधि उपयोग करने के लिए सीधी है और आपको स्कीमा की आवश्यकता नहीं है। निम्नलिखित चेतावनी के साथ:
उदाहरण के लिए, निम्नलिखित घोषणा लें:
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
इस कोड को निष्पादित करना:
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
निम्नलिखित फ़ाइल में परिणाम होगा:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
java.beans.XMLDecoder
उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा के साथ उपयोग करने से आपके कोड में मनमाने ढंग से कोड निष्पादन कमजोरियां आ सकती हैं।
यदि आप वस्तुओं के स्वचालित XML क्रमांकन के बारे में बात कर रहे हैं, तो Castor देखें :
कैस्टर जावा [tm] के लिए एक ओपन सोर्स डेटा बाइंडिंग फ्रेमवर्क है। यह जावा ऑब्जेक्ट्स, XML डॉक्यूमेंट और रिलेशनल टेबल के बीच सबसे छोटा रास्ता है। कैस्टर जावा-टू-एक्सएमएल बाइंडिंग, जावा-टू-एसक्यूएल दृढ़ता और बहुत कुछ प्रदान करता है।
आमतौर पर मैं jaxb या XMLBeans का उपयोग करता हूं अगर मुझे XML से संबंधित धारावाहिक बनाने की आवश्यकता होती है। अब, मैं देख सकता हूँ कि XStream बहुत उपयोगी हो सकता है क्योंकि यह गैर-लाभकारी है और वास्तव में सरल एपीआई है। मैं जल्द ही इसके साथ खेलूंगा और शायद इसका इस्तेमाल करूंगा। एकमात्र दोष मैंने देखा कि मैं क्रॉस रेफ़रिंग के लिए अपने दम पर ऑब्जेक्ट आईडी नहीं बना सकता।
@Barak Schiller
XStream की लिंक पोस्ट करने के लिए धन्यवाद!
यदि आप एक संरचित समाधान (जैसे ORM) चाहते हैं तो JAXB2 एक अच्छा समाधान है।
यदि आप DOT NET जैसे क्रमांकन चाहते हैं तो आप JavaBeans Components की दीर्घकालिक दृढ़ता का उपयोग कर सकते हैं
चुनाव क्रमांकन के उपयोग पर निर्भर करता है।
public static String genXmlTag(String tagName, String innerXml, String properties )
{
return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName);
}
public static String genXmlTag(String tagName, String innerXml )
{
return genXmlTag(tagName, innerXml, "");
}
public static <T> String serializeXML(List<T> list)
{
String result = "";
if (list.size() > 0)
{
T tmp = list.get(0);
String clsName = tmp.getClass().getName();
String[] splitCls = clsName.split("\\.");
clsName = splitCls[splitCls.length - 1];
Field[] fields = tmp.getClass().getFields();
for (T t : list)
{
String row = "";
try {
for (Field f : fields)
{
Object value = f.get(t);
row += genXmlTag(f.getName(), value == null ? "" : value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
row = genXmlTag(clsName, row);
result += row;
}
}
result = genXmlTag("root", result);
return result;
}