java - JAXB - 根标签结束后添加额外字符

标签 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。

谢谢;)

最佳答案

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

  1. XML 编码到 FileOutputStream,生成 XML 文件
  2. 然后在步骤 1 中的 XML 文件上打开 FileInputStream,并将 FileInputStream 写入 ServletOutputStream

一定发生了缓冲区下溢

解决方案

XML 直接编码到 ServletOutputStream(供 Web 用户下载 XML 文件)。

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

其中os是一个ServletOutputStream

    //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();

关于java - JAXB - 根标签结束后添加额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6743694/

相关文章:

java - 为什么我的 android volley 的 http post 请求会抛出错误(localhost)?

java - 将 Windows Java 命令转换为 Linux Java 命令?

java - JAXB2注释: troubles rendering a value in a list

java - 如何在 Intellij 构建上生成 jaxb2 类?

java - 响应中没有 namespace 的 SOAP(Spring Boot)

Java树节点选择

Java JNA 解引用指针

java - 在 Android 中通过 ImageView 显示 TextView

spring - 包名不包含 ObjectFactory.class 或 jaxb.in​​dex

java - JAXB @XmlElements 命令