2

我有两个 XML 模式 - 第一个是包含第二个 XML 模式作为子节点的信封。我自己编组-解组子节点(两者都用@XMLRootElement注释)和根节点与子节点一起。

当我编组包含子对象的根 JAXB 对象时,我需要得到:

<ns0:Root xmlns:ns0="http://ns0.com" xmlns:ns1="http://ns1.com">
<ns1:Element1/>
<ns1:Element2/>
..
<Child targetNamespace="http://child.com" xmlns:ns2="http://ns2.com", xmlns:ns3="http://ns3.com">
  <ns2:ChildElement1/>
  <ns3:ChildElement2/>
  ..
</Child>
</ns0:Root>

但相反,我得到了类似的东西:

<ns0:Root xmlns:ns0="http://ns0.com" xmlns:ns1="http://ns1.com" ns4="http://child.com" xmlns:ns2="http://ns2.com", xmlns:ns3="http://ns3.com">
<ns1:Element1/>
<ns1:Element2/>
..
<ns4:Child>
  <ns2:ChildElement1/>
  <ns3:ChildElement2/>
  ..
</ns4:Child>
</ns0:Root>

所以所有的命名空间声明都放在最上面的根节点,子节点的目标命名空间也得到一个前缀。我还创建了一个 NamespacePrefixMapper 来自定义命名空间前缀。

如何自定义编组进程/JAXB 对象以获得所需的输出?端点期待这种精确的格式,而不是我们控制的。如果我直接使用 DOM 将子节点注入我将单独编组到根元素中,这可能是可能的,但这似乎不是正确的做法。

感谢您的输入。

问候, Gökhan

4

0 回答 0