java - 在 JAXB Marshaller.marshal 中使用 ByteArrayOutputStream 时格式化生成的 XML 文件

标签 java jaxb

我有以下方法,它采用基于模式的 Java 对象图并将其编码到 ByteArrayOutputStream,然后将该流传递到 SVN 以保存物理 xml 文件。当我使用任何编辑器查看保存的文件时,XML 未对齐且选项卡关闭。我绝对希望尽可能保持编码(marshal)的性能,因此我希望将编码(marshal)的对象保留为 ByteArrayOutputStream。过去,我将 String 传递给 JAXB marshal 方法,并且输出 XML 已格式化,但转换为 String 然后转换为 Stream 以保存到 SVN 的性能不高。在将 ByteArrayOutputStream 传递给 marshal 方法时如何格式化有什么想法吗?

  ByteArrayOutputStream xmlStream = new ByteArrayOutputStream();
  MarshalToObj obj = //retrieve object
        try {
          Marshaller marshaller = JAXBSingletonContextFactory.getInstance().createMarshaller();
          marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
          marshaller.marshal(obj, xmlStream);
        } catch (JAXBException e) {

        }

JAXBContext 实例的单例:

 public class JAXBSingletonContextFactory {

      private static JAXBContext jaxbContext;

      public static final JAXBContext getInstance() throws JAXBException {
        if (jaxbContext == null) {
          jaxbContext = JAXBContext.newInstance(com.test.MarshalToObj.class);
        }
        return jaxbContext;
      }
    }

最佳答案

在编码到 ByteArrayOutputStream 时,您已经调用了适当的方法来格式化 XML。

      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

您遇到的任何问题都是由于您正在使用的特定 JAXB 实现/版本中的问题造成的。例如,以下链接演示了 JAXB 引用实现的奇怪格式化行为。

关于java - 在 JAXB Marshaller.marshal 中使用 ByteArrayOutputStream 时格式化生成的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224515/

相关文章:

java - Wicket,如何在单击时延迟加载 DropDown 选择?

Java Swing Die绘图

java - 流中的 If 语句

web-services - 使用 JAXB 和 Eclipselink Moxy 从 Web 服务方法返回 JPA 实体

java - JAXB 如何将复合键字段映射为同级

java - 如何将 jaxb 打印到 java 对象到记录器中

java - 以 XML 格式表示带有循环、流动的电路?

java - 嵌套 XML 解码到 POJO 类

javax注解问题

java - 更改 Google Maps V2 中的标记颜色