gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:02 24 4
gpt4 key购买 nike

我有以下方法,它采用基于模式的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com