2013-01-04 18 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(); 
     } 

Questo è il codice che sto usando..e sto ricevendo come segue.Rimuovi standalone = "sì" da xax generato xml

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

qui voglio rimuovere standalone = "yes" e vogliono uscita come

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

ho controllato collegamento JAXB - Remove 'standalone="yes"' from generated XML ma risposte qui sono la rimozione completa

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

parte

Non voglio che ...

Please help me ..

risposta

6

Ci sono un paio di questioni che devono essere affrontate nella vostra domanda:

Issue # 1 - Codifica

La proprietà "jaxb.encoding" quando set colpisce direttamente la codifica quando l'uscita è OutputStream. Se si utilizza un'uscita che (come ad esempio Writer) è responsabile della gestione della propria codifica, è necessario assicurarsi di gestirla come parte di Writer.

Per ulteriori informazioni

ISSUE # 2 - standalone="yes"

È possibile creare uno StAX (JSR-173) XMLStreamWriter per avvolgere il vostro StringWriter per la vostra Output XML e maresciallo a quello.

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; 
    } 

} 

uscita

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

ALTERNATIVO APPROCCIO

Nota: Sono in vantaggio EclipseLink JAXB (MOXy) e un membro del gruppo di esperti JAXB (JSR-222).

Esistono altri provider JAXB (JSR-222) come MOXy che non emettono standalone="yes" come parte dell'output XML che è possibile utilizzare.

+2

Grazie mille Blaise Doughan.It funzionato !! – vg123