JAXB使用动态命名空间进行编组

时间:2014-04-29 08:49:23

标签: java xml jaxb

我遇到了JAXB编组问题。我有一些从一些XSD生成的类。我需要能够动态地更改命名空间URI - 在编组对象时。

我只是使用自己的QName,比如

new JAXBElement<MyType>(new QName(uri, "Doc") ....

它有效。然而问题是MyType由很少的其他类组成,我也想为它们更改名称空间(实际上所有这些元素都使用同一个名称空间,我只想更改URI的URI这个命名空间)。 结果XML仅为我的“root”元素更改了命名空间,我指定了QName,它看起来像这样

<ns2:Dok>
    <ns1:Elem>a</ns1:Elem>
</ns2:Dok>

其中ns2是我用QName提供的新命名空间,但是如果在生成的类的包信息中写入,则ns1仍然是“旧的”。 我的问题是 - 如何更好地命名空间?如何更改所有元素的名称空间URI,如何使我的新QName也适用于所有子元素?

1 个答案:

答案 0 :(得分:0)

您可以在根元素上设置默认命名空间。根据定义,如果您不为内部(子)元素提供名称空间,它将继承父项已声明的默认名称空间。在您的情况下,将ns2声明为 上的默认命名空间,然后您必须从 中删除ns1命名空间。您可能还会发现此问题/答案Removing extra ns2 annotation in xml对您的案例很有用。