क्या आप परिणामी XML में स्वसंपूर्ण = "हां" को रोकने के लिए एक JAXB सेटिंग के बारे में जानते हैं ?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
क्या आप परिणामी XML में स्वसंपूर्ण = "हां" को रोकने के लिए एक JAXB सेटिंग के बारे में जानते हैं ?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
जवाबों:
यह संपत्ति:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
... का इस्तेमाल किया जा सकता है:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
हालाँकि, मैं इस सर्वोत्तम अभ्यास पर विचार नहीं करूँगा।
JAXB में JDK1.6 का हिस्सा है
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
standalone
एक्सएमएल घोषणा में विशेषता को हटा रहा है ।
आप या तो उपयोग कर सकते हैं
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
या
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)
डिफ़ॉल्ट XML घोषणा को अक्षम करने के लिए, और फिर अपने कस्टम XML घोषणा को जोड़ें,
<?xml version="1.0" encoding="UTF-8"?>
द्वारा
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
उत्पन्न xml के लिए, इस प्रकार स्टैंडअलोन = "हाँ" संपत्ति से परहेज करना ।
यदि आप दस्तावेज़ को निर्भर करते हैं DOCTYPE
(जैसे नामित संस्थाओं का उपयोग करें) तो यह स्टैंडअलोन होना बंद हो जाएगा, इस प्रकार standalone="yes"
एक्सएमएल घोषणा में अनुमति नहीं दी जाएगी।
हालांकि स्टैंडअलोन XML का उपयोग कहीं भी किया जा सकता है, जबकि गैर-स्टैंडअलोन XML पार्सर के लिए समस्याग्रस्त है जो बाहरी लोड नहीं करते हैं।
मैं यह नहीं देखता कि यह घोषणा एक समस्या कैसे हो सकती है, सॉफ्टवेयर के साथ इंटरऑपरेबिलिटी के अलावा, जो एक्सएमएल का समर्थन नहीं करता है, लेकिन कुछ भयानक रीपेक्स सूप।
DOCTYPE
?
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
इसने मेरे लिए JDK1.7 के साथ काम किया। स्टैंडअलोन = \ "नहीं \" को केवल एक्सएमएल भाग के बाकी हिस्सों को प्राप्त करने के लिए हटाया जा सकता है
यदि आप केवल डिफ़ॉल्ट javax.xml पैकेज का उपयोग कर रहे हैं, तो आप मार्शलर के JAXB_FRAGMENT विकल्प को 'सही' पर सेट कर सकते हैं (यह डिफ़ॉल्ट xml प्रसंस्करण निर्देश को छोड़ देता है) और अपने स्वयं के सम्मिलित करने के लिए XMLStreamWriter के राइटप्रोसेसिंग .Inter विधि का उपयोग करें:
xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
आप उपयोग कर सकते हैं: marshaller.setProperty ("jaxb.fragment", Boolean.TRUE);
यह मेरे लिए जावा 8 पर काम करता है
मेरे पास टिप्पणी करने के लिए "विशेषाधिकार" के लिए पर्याप्त उच्च "प्रतिष्ठा" नहीं है। ;-)
@Debasis, ध्यान दें कि आपके द्वारा निर्दिष्ट संपत्ति:
"com.sun.xml.internal.bind.xmlHeaders"
होना चाहिए:
"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)
यदि मैंने "आंतरिक" संपत्ति का उपयोग किया, जैसा कि मैंने किया था, तो मुझे एक javax.xml.bind.PropertyException मिली
यदि आपको संपत्ति अपवाद मिल रहा है, तो निम्नलिखित कॉन्फ़िगरेशन जोड़ें:
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
मैं जावा 1.8 और JAXB 2.3.1 का उपयोग कर रहा हूं
सबसे पहले, pom.xml में जावा 1.8 का उपयोग करना सुनिश्चित करें
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
तब स्रोत कोड में मैंने इस्तेमाल किया: (कुंजी आंतरिक भाग था)
// remove standalone=yes
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
कोशिश करो
private String marshaling2(Object object) throws JAXBException, XMLStreamException {
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
jaxbMarshaller.marshal(object, writer);
return writer.toString();
}
यदि आपके पास है <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
लेकिन यह चाहते हैं: <?xml version="1.0" encoding="UTF-8"?>
बस करो:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");