क्या यह javax.xml.bind.annotation.XmlType को XML के स्ट्रिंग प्रस्तुति में परिवर्तित करना संभव है?XmlType के स्ट्रिंग का प्रतिनिधित्व कैसे प्राप्त करें?
उदाहरण:
निम्नलिखित वर्ग अनुरोध तो मैं toString() विधि ओवरराइड नहीं कर सकते एक तीसरी पार्टी पुस्तकालय से है।
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
@javax.xml.bind.annotation.XmlType(name = "req", propOrder = {"myDetails", "customerDetails"})
public class Req {
...
}
अपने आवेदन में मैं इतना है कि मैं इसे एक फाइल करने के लिए लॉग इन कर सकते बस एक्सएमएल के एक स्ट्रिंग प्रतिनिधित्व प्राप्त करना चाहते हैं:
<Req>
<MyDetails>
...
</MyDetails>
<CustomerDetails>
...
</CustomerDetails>
</Req>
मैं JAXB और मार्शल उपयोग करने के लिए एक्सएमएल कन्वर्ट करने के लिए प्रयास करते हैं स्ट्रिंग:
JAXBContext context = JAXBContext.newInstance(Req.class);
Marshaller marshaller = context.createMarshaller();
StringWriter sw = new StringWriter();
marshaller.marshal(instanceOfReq, sw);
String xmlString = sw.toString();
मैं निम्न अपवाद प्राप्त करें:
javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: unable to marshal type "mypackage.Req" as an element because it is missing an @XmlRootElement annotation]
मैंने तीसरे पक्ष पुस्तकालय के भीतर अन्य कक्षाओं पर एक नज़र डाली है और उनमें से कोई भी @XmlRootElement एनोटेशन का उपयोग नहीं करता है। इस के आसपास किसी भी तरह से?
ओपी को चेतावनी का एक शब्द: 'JAXBContext' महंगे (धीमी) बनाने के लिए हैं। एक उदाहरण बनाएं और पुन: उपयोग करें। –
जेएक्सबी और मार्शल का उपयोग करने का प्रयास किया लेकिन उपरोक्त पद में वर्णित मार्शलएक्सप्शन प्राप्त करें। – ryan
और आप XmlRoot एनोटेशन जोड़ने के लिए कक्षा Req को नहीं बदल सकते हैं? –