我在两个不同的步骤中编组我的对象。一个添加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接口的所有属性,但这没有帮助。
答案 0 :(得分: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);
它就像一个魅力!