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

Dis*_*ish 7 java xml jaxb marshalling

我在两个单独的步骤中编组我的对象.一个添加Header,另一个添加Body.现在当我使用这段代码

marshaller.marshal(payload, writer); 
//payload is Objects name and writer is StringWriter class object
Run Code Online (Sandbox Code Playgroud)

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

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

我已经使用了Marshaller界面的所有属性,但这没有帮助.

bdo*_*han 5

您需要执行以下操作:

  1. 手动编写根元素(不使用JAXB)
  2. Marshal the Header对象.根元素应该是标头的本地根元素.
  3. Marshal the Body对象.根元素应该是正文的局部根元素.
  4. 手动关闭根元素(不使用JAXB)

如果可能,使用StAX XMLStreamWriter进行手动编写和编组.我的博客上有一个相关的例子:

注意:

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

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
Run Code Online (Sandbox Code Playgroud)


Dis*_*ish 5

这个问题的解决方案比编写自己的代码简单得多.

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

所以我在编写BODY部分之前就保留了以下代码:

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力!