Java 具有动态名称空间的JAXB编组

Java 具有动态名称空间的JAXB编组,java,xml,jaxb,Java,Xml,Jaxb,我对JAXB编组有一个问题。我有一组从一些XSD生成的类。我需要能够在封送对象时动态更改名称空间URI 我只是用我自己的QName,比如 new JAXBElement<MyType>(new QName(uri, "Doc") .... 其中,ns2是我随QName提供的新名称空间,但ns1仍然是“旧名称空间”,如果在生成类的包信息中写入的话)。 我的问题是-如何永久更改名称空间?如何更改所有元素的名称空间URI,如何使我的新QName也应用于所有子元素?您可以在根元素上设置默认

我对JAXB编组有一个问题。我有一组从一些XSD生成的类。我需要能够在封送对象时动态更改名称空间URI

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

new JAXBElement<MyType>(new QName(uri, "Doc") ....
其中,ns2是我随QName提供的新名称空间,但ns1仍然是“旧名称空间”,如果在生成类的包信息中写入的话)。
我的问题是-如何永久更改名称空间?如何更改所有元素的名称空间URI,如何使我的新QName也应用于所有子元素?

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

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