JAXB - 在根标记关闭后添加额外字符

时间:2011-07-19 07:34:01

标签: java jaxb2

当我将Java对象编组为XML时,在关闭根标记后会添加一些额外的字符。

以下是在从XML解组到文件后保存生成的java对象的方法:

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.

谢谢;)

1 个答案:

答案 0 :(得分:1)

这是因为我在保存XML时执行了两个步骤:

  1. XML封送到FileOutputStream,从而生成XML个文件
  2. 然后在步骤1中的FileInputStream文件上打开XML并将FileInputStream写入ServletOutputStream
  3. 必定会发生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();