2011-07-19 65 views
1

當我將Java對象編組爲XML時,會在關閉根標記後添加一些額外的字符。JAXB - 額外字符在根標記關閉後添加

這是我如何保存生成的Java對象從XML解編到一個文件後:

public void saveStifBinConv(ConversionSet cs, String xmlfilename) { 
    FileOutputStream os = null; 
    try { 
     os = new FileOutputStream(xmlfilename); 
     this.marshaller.marshal(cs, new StreamResult(os)); 
    } 
    catch (IOException e) { 
     log.fatal("IOException when marshalling STIF Bin Conversion XML file"); 
     throw new WmrFatalException(e); 
    } 
    finally { 
     if (os != null) { 
      try { 
       os.close(); 
      } 
      catch (IOException e) { 
       log.fatal("IOException when closing FileOutputStream"); 
       throw new WmrFatalException(e); 
      } 
     } 
    } 
} 

多餘的字符結束根標籤的標籤後進行填充。

添加的字符是XML中的一些字符。例如:tractor-to-type><bin-code>239</bin-code><allowed>YES</allowed></extractor-to></extractor-mapping><extractor-mapping><e

我使用Spring OXM的Jaxb2Marshaller和JAXB 2

感謝;)

+2

添加了哪些字符?還提供編組相關的代碼,而不是填充模型。 –

+0

添加的字符是XML中的一些字符。示例:'tractor-to-type> YES

+0

請編輯您的問題併爲您獲得的額外字符添加示例。上面的代碼可能沒有幫助。 'saveStifBinConv()'中有什麼? –

回答

1

這是因爲我在拯救XML 2步:

  1. 元帥XMLFileOutputStream,產生一個XML文件
  2. 然後打開一個FileInputStreamXML文件在步驟1和寫入FileInputStreamServletOutputStream

必須有一個buffer underflow發生。

解決方案

元帥XML直接向ServletOutputStream(用於網絡用戶下載XML文件)。

 JAXBContext jc = JAXBContext.newInstance(pkg); 
     Marshaller m = jc.createMarshaller(); 
     m.marshal(cs, os); 

其中osServletOutputStream

//return an application file instead of html page 
    response.setContentType("text/xml");//"application/octet-stream"); 
    response.setHeader("Content-Disposition", "attachment;filename=" 
     + xmlFilename); 

    OutputStream out = null; 
    out = response.getOutputStream();