子节点上的命名空间声明而不是根节点

时间:2013-07-24 09:54:44

标签: jaxb marshalling

我有两个XML模式 - 第一个是包含第二个XML模式作为子节点的信封。我marshall-unmarshall子节点本身(都用@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来注入我将单独编组到子元素中的子节点,这可能是可能的,但这似乎不是正确的方法。

感谢您的意见。

此致 GOKHAN

0 个答案:

没有答案