【问题标题】:JAXB marshalling with dynamic namespace使用动态命名空间进行 JAXB 编组
【发布时间】:2014-04-29 08:49:22
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-08
      • 2014-11-07
      • 2018-03-27
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 2015-06-21
      • 2020-06-04
      相关资源
      最近更新 更多