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

To jest kod, którego używam .. i otrzymuję dane wyjściowe w następujący sposób.Usuń standalone = "yes" z jaxb wygenerował xml

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

Tutaj chcę usunąć standalone = "yes" i chce wyjścia jak

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

sprawdziłem Link JAXB - Remove 'standalone="yes"' from generated XML ale odpowiedzi tutaj wyjmujesz kompletny

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

część

Nie chcę tego ...

Proszę mi pomóc ..

Odpowiedz

6

Istnieje kilka kwestii, które muszą zostać uwzględnione w swoim pytaniu:

problem # 1 - Kodowanie

Obiekt "jaxb.encoding" gdy zestawy wpływa bezpośrednio kodowanie, gdy wyjście jest OutputStream. Jeśli używasz wyjścia, które (takie jak Writer), które jest odpowiedzialne za obsługę własnego kodowania, musisz upewnić się, że obsługujesz to jako część Writer.

Aby uzyskać więcej informacji

problem # 2 - standalone="yes"

Można utworzyć Stax (JSR-173) XMLStreamWriter owinąć StringWriter dla Twojego Wyjście XML i marszałek do tego.

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

} 

Wyjście

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

ALTERNATE PODEJŚCIE

Uwaga: Jestem EclipseLink JAXB (MOXy) ołowiu i członkiem grupy JAXB (JSR-222) ekspertów.

Są inni dostawcy JAXB (JSR-222), tacy jak MOXy, którzy nie wyprowadzają standalone="yes" jako części wyjścia XML, którego można użyć.

+2

Dziękuję bardzo Blaise Doughan.It pracował !! – vg123

Powiązane problemy