java - JAXB marshalling problem - probably namespace related -


प्रारंभिक XML (बीपीईएल) फ़ाइल को देखते हुए:

  & lt;? Xml संस्करण = " 1.0 "एन्कोडिंग =" यूटीएफ -8 "? & Gt; & Lt; प्रक्रिया का नाम = "टेस्टएसवीजी 2" xmlns = "http://www.example.org" targetNamespace = "http://www.example.org" xmlns: xsd = "http://www.w3.org/2001 / XMLSchema "& gt; & LT; अनुक्रम & gt; & Lt; प्राप्त नाम = "प्राप्त करें 1" createInstance = "yes" / & gt; & Lt; असाइन करें नाम = "असाइन 1" / & gt; & Lt; इनवॉइस नाम = "अन्वोक 1" / & gt; & Lt; नाम असाइन करें = "असाइन 2" / & gt; & Lt; उत्तर नाम = "उत्तर 1" / & gt; & Lt; / अनुक्रम & gt; & Lt; / प्रक्रिया & gt;  

मैंने एक फ़ंक्शन लिखा है जो XML के अंदर कुछ डेटा को संशोधित करने के लिए JAXB का उपयोग करता है फ़ंक्शन निम्नानुसार है:

  सार्वजनिक शून्य संपादन एक्शन (स्ट्रिंग का नाम, स्ट्रिंग न्यूनाम) {Process proc; स्ट्रिंगव्राइट SW = नया स्ट्रिंगर्राइटर (); JAXBContext jaxbContext = नल; Unmarshaller unMarsh = नल; वस्तु obj = नया ऑब्जेक्ट (); जवा ऑब्जेक्ट * / jaxbContext = JAXBContext.newInstance ("org.example") से {/ * एक्सएमएल] प्रयास करें; अनमारश = जेक्सब कोंटेन्टेक्स्ट.क्रेतेउन्नरशैलर (); Obj = unMarsh.unmarshal (नई फ़ाइल (पथ + "/ संसाधन /" + BPELFilename)); Proc = (प्रक्रिया) obj; प्रक्रिया। असमानता अनुक्रम = proc.getSequence (); / * निर्धारित करें कि किस तत्व को संपादित करना है / / * कुछ संपादन करना, कोड शामिल नहीं था * / / * OBJ वापस XML * / Marshaller marsh = jaxbContext.createMarshaller (); Marsh.setProperty (मार्शलर। जेएसीएबी_FORMATTED_OUTPUT, बूलियन.TRUE); //marsh.setProperty("com.sun.xml.bind.namespacePrefixMapper ", नए CustomPrefixMapper ()); Marsh.marshal (obj, नई फ़ाइल (पथ + "/ संसाधन /" + BPELFilename)); } पकड़ (JAXBException ई) {/ डरो * * / e.printStackTrace (); }}  

JAXB- संबंधित संपादन के बाद परिणामी XML है:

  & lt;! - बाद - & gt; & Lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8"? & Gt; & Lt; ns0: प्रक्रिया का नाम = "TestSVG2" targetNamespace = "http://www.example.org" xmlns: ns0 = "http://www.example.org" & gt; & LT; ns0: अनुक्रम & gt; & Lt; ns0: प्राप्त नाम = "नया नाम" createInstance = "yes" / & gt; & Lt; ns0: असाइन नाम = "असाइन 1" / & gt; & Lt; ns0: असाइन नाम = "असाइन 2" / & gt; & Lt; ns0: आमंत्रण नाम = "इनवाक 1" / & gt; & Lt; ns0: उत्तर नाम = "उत्तर 1" / & gt; & Lt; / ns0: अनुक्रम & gt; & Lt; / ns0: प्रक्रिया & gt;  

दुर्भाग्य से, परिणामस्वरूप एक्सएमएल हमारे आवेदन के अनुरूप नहीं है, क्योंकि हमारे एक्सएमएल पार्सर क्रैश करते समय नया एक्सएमएल पार्स करता है।

इसलिए:

  • मैं नामस्थान ns0 को परिणामी XML में कैसे निकालूं?
  • मैं कैसे प्रारंभिक XML फ़ाइल से एक ही हेडर ( xml: xsd गुम है)?

धन्यवाद!

यदि आप कार्यान्वयन का उपयोग करते हैं तो आप निम्न कर सकते हैं:

आपकी डोमेन ऑब्जेक्ट:

  पैकेज उदाहरण ; आयात javax.xml.bind.annotation.XmlRootElement; @ XmlRootElement सार्वजनिक वर्ग की प्रक्रिया {}  

उस पैकेज एनोटेशन @XmlSchema का उपयोग करें

  @ javax.xml.bind.annotation.XmlSchema (नामस्थान = "http: //www.example.org ", xmlns = {@ javax.xml.bind.annotation.XmlNs (उपसर्ग =" xsd ", नामस्थान = i.e.," http://www.w3.org/2001/XMLSchema "),}, ElementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) पैकेज उदाहरण;  

MOXy JAXB का उपयोग करने के लिए आपको निम्न प्रविष्टि के साथ अपने मॉडल कक्षाओं में एक jaxb.properties फ़ाइल जोड़ने की आवश्यकता है:

  javax.xml.bind Context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory  

यह XML का उत्पादन करेगा:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8" & gt; & Lt; प्रक्रिया xmlns = "http://www.example.org" xmlns: xsd = "http://www.w3.org/2001/XMLSchema" / & gt;  

Comments

Popular posts from this blog

Eclipse CDT variable colors in editor -

AJAX doesn't send POST query -

wpf - Custom Message Box Advice -