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

Java 在JAXB Marshaller.marshal中使用ByteArrayOutputStream时格式化生成的XML文件,java,jaxb,Java,Jaxb,我有下面的方法,它采用基于模式的Java对象图并将其封送到ByteArrayOutputStream,然后将该流传递给SVN以保存物理xml文件。当我使用任何编辑器查看保存的文件时,XML没有对齐,选项卡处于关闭状态。我当然希望尽可能地保持封送的性能,因此我希望将封送的对象保持为ByteArrayOutputStream。在过去,我将字符串传递给JAXB marshal方法,输出的XML是格式化的,但转换为字符串然后再转换为流以保存到SVN并不是很有效。在将ByteArrayOutputStre

我有下面的方法,它采用基于模式的Java对象图并将其封送到ByteArrayOutputStream,然后将该流传递给SVN以保存物理xml文件。当我使用任何编辑器查看保存的文件时,XML没有对齐,选项卡处于关闭状态。我当然希望尽可能地保持封送的性能,因此我希望将封送的对象保持为ByteArrayOutputStream。在过去,我将字符串传递给JAXB marshal方法,输出的XML是格式化的,但转换为字符串然后再转换为流以保存到SVN并不是很有效。在将ByteArrayOutputStream传递给封送方法时,您知道如何格式化吗

  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实例的单例:


在编组到ByteArrayOutputStream时,您已经在调用相应的方法来格式化XML

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


看下面的问题,所以我不知道这是同一个问题。
 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;
      }
    }
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);