2013-01-04 32 views
6
public final String getMessage() { 
      JAXBContext jaxbContext; 
      StringWriter sw = new StringWriter(); 
      try { 
       jaxbContext = JAXBContext.newInstance(Login.class);   
       Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

       jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");      
         jaxbMarshaller.marshal(this, sw); 
      } catch (JAXBException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return sw.toString(); 
     } 

यह स्टैंड कोड है जो मैं उपयोग कर रहा हूं..और मुझे आउटपुट मिल रहा है।jaxb जेनरेट xml

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 

यहाँ मैं के रूप में

<?xml version="1.0" encoding="ISO-8859-1"?> 

मैं कड़ी जाँच की स्टैंडअलोन दूर करने के लिए = "हाँ" और आउटपुट चाहते हैं JAXB - Remove 'standalone="yes"' from generated XML लेकिन यहाँ उत्तर हटा रहे हैं पूरा

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

हिस्सा

मुझे यह नहीं चाहिए ...

कृपया मेरी मदद करो ..

उत्तर

6

वहाँ मुद्दों अपने प्रश्न में संबोधित करने की आवश्यकता है के एक जोड़े हैं:

मुद्दा # 1 - एन्कोडिंग

"jaxb.encoding" संपत्ति जब सेट सीधे प्रभावित करता है आउटपुट जब OutputStream होता है तो एन्कोडिंग। यदि आप आउटपुट का उपयोग कर रहे हैं (जैसे Writer) जो कि अपने एन्कोडिंग को संभालने के लिए प्रतिलिपि है तो आपको यह सुनिश्चित करना होगा कि आप Writer के हिस्से के रूप में इसे संभालें।

अधिक जानकारी के लिए

अंक # 2 - standalone="yes"

आप के लिए अपने StringWriter रैप करने के लिए एक StAX (JSR-173) XMLStreamWriter बना सकते हैं अपने एक्सएमएल आउटपुट और उसमें मार्शल।

import java.io.*; 
import javax.xml.bind.*; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.stream.*; 

@XmlRootElement 
public class Login { 

    private JAXBContext jaxbContext; 
    private XMLOutputFactory xmlOutputFactory; 

    public Login() { 
     try { 
      jaxbContext = JAXBContext.newInstance(Login.class); 
      xmlOutputFactory = XMLOutputFactory.newFactory(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    public static void main(String[] args) { 
     Login demo = new Login(); 
     System.out.println(demo.getMessage()); 
    } 

    public final String getMessage() { 
     try { 
      Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
      jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1"); 
      jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(baos, (String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING)); 
      xmlStreamWriter.writeStartDocument((String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING), "1.0"); 
      jaxbMarshaller.marshal(this, xmlStreamWriter); 
      xmlStreamWriter.writeEndDocument(); 
      xmlStreamWriter.close(); 
      return new String(baos.toByteArray()); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

आउटपुट

<?xml version="1.0" encoding="ISO-8859-1"?><login></login> 

वैकल्पिक दृष्टिकोण

नोट: मैं EclipseLink JAXB (MOXy) नेतृत्व और JAXB (JSR-222) विशेषज्ञ समूह का सदस्य हूँ।

अन्य जेएक्सबी (जेएसआर -222) प्रदाता जैसे MOXy हैं जो XML आउटपुट के हिस्से के रूप में standalone="yes" आउटपुट नहीं करते हैं।

+2

बहुत बहुत ब्लेज Doughan.It काम किया धन्यवाद !! – vg123