如何阻止Marshaller类在我的输出文件中添加XML标记

时间:2014-08-21 14:26:39

标签: java xml jaxb marshalling

我在两个不同的步骤中编组我的对象。一个添加Header,另一个添加Body。现在当我使用这段代码时

marshaller.marshal(payload, writer); 
//payload is Objects name and writer is StringWriter class object

XML标记<?xml version="1.0" encoding="utf-8"?>在最终输出文件中添加两次。

当我在编组正文部分时,如何才能第二次添加[<?xml version="1.0" encoding="utf-8"?>] XML标记?

我已经使用了Marshaller接口的所有属性,但这没有帮助。

2 个答案:

答案 0 :(得分:5)

您需要执行以下操作:

  1. 手动编写根元素(不使用JAXB)
  2. Marshal the Header对象。根元素应该是标题的本地根元素。
  3. Marshal the Body对象。根元素应该是正文的本地根元素。
  4. 手动关闭根元素(不使用JAXB)
  5. 如果可能,请使用StAX XMLStreamWriter进行手动编写和编组。我的博客上有一个相关的例子:

    注意:

    当您编组到XML文档中时,必须在Marshaller上指定以下属性。

    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
    

答案 1 :(得分:5)

解决这个问题的方法比编写我自己的代码简单得多。

您需要在Marshaller上将JAXB_FRAGMENT属性指定为true以避免此问题。这个属性让JAXB知道它正在编组到文档的中间,并且它不应该写标题。

因此,在编写BODY部分之前,我一直保持在代码之下:

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

它就像一个魅力!