我有两个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