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

Đây là mã tôi đang sử dụng..và tôi nhận được kết quả như sau.Xóa standalone = "yes" khỏi jaxb được tạo xml

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

Ở đây tôi muốn loại bỏ độc = "yes" và muốn đầu ra như

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

Tôi đã kiểm tra link JAXB - Remove 'standalone="yes"' from generated XML nhưng câu trả lời ở đây là loại bỏ hoàn toàn

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

phần

Tôi không muốn điều đó ...

Xin hãy giúp tôi ..

Trả lời

6

Có một vài vấn đề cần được giải quyết trong câu hỏi của bạn:

Issue # 1 - Encoding

Thuộc tính "jaxb.encoding" khi bộ trực tiếp ảnh hưởng đến mã hóa khi đầu ra là OutputStream. Nếu bạn đang sử dụng một đầu ra (chẳng hạn như Writer), điều đó là có trách nhiệm đối với việc xử lý mã hóa riêng của nó thì bạn cần đảm bảo rằng bạn xử lý nó như là một phần của Writer.

Để biết thêm thông tin

CẤP # 2 - standalone="yes"

Bạn có thể tạo một Stax (JSR-173) XMLStreamWriter quấn StringWriter của bạn cho bạn Đầu ra XML và so sánh với điều đó.

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

} 

Output

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

TIẾP CẬN ALTERNATE

Lưu ý: Tôi là người dẫn đầu EclipseLink JAXB (MOXy) và là thành viên của nhóm JAXB (JSR-222) chuyên gia.

Có các nhà cung cấp JAXB (JSR-222) khác như MOXy không xuất ra standalone="yes" như một phần của Đầu ra XML mà bạn có thể sử dụng.

+2

Cảm ơn bạn rất nhiều Blaise Doughan.It làm việc !! – vg123

Các vấn đề liên quan