JAXB具有相同前缀的多个名称空间

时间:2017-02-24 12:43:16

标签: java jaxb java-8

这是我在StackOverflow上的第一个问题,所以请耐心等待。

我在编组XML时遇到问题,该问题使用不同命名空间的默认前缀。使用默认前缀的每个元素都应在其开始标记中指定其名称空间。我想要实现的一个例子就是这样(简化):

<parent xmlns="parentNamespace" xmlns:cd1="child1Namespace">
    <cd1:child1/>
    <child2 xmlns="child2Namespace">
        ...
    </child2>
    <child3 xmlns="child3Namespace">
        ...
    </child3>
</parent>

我尝试使用这样的注释在我试图编组的对象的package-info.java中设置名称空间前缀:

@javax.xml.bind.annotation.XmlSchema(
    namespace = "parentNamespace",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns = {
        @XmlNs(prefix="",parentNamespace"),
        @XmlNs(prefix="cd1", namespaceURI="child1Namespace"),
        @XmlNs(prefix="", namespaceURI="child2Namespace"),
        @XmlNs(prefix="", namespaceURI="child3Namespace")
    }
)

但最终结果是这样的:

<ns1:parent xmlns:ns1="parentNamespace" xmlns:cd1="child1Namespace" xmlns="child2Namespace xmlns:ns2="child3Namespace"<
    <cd1:child1/>
    <child2>
        ...
    </child2>
    <ns2:child3>
        ...
    </ns2:child3>
</ns1:parent>

这确实是一个有效的XML,但不幸的是,由于我无法控制的原因还不够好(不通过验证)。另请注意,使用Java 8的解决方案是非常可取的,因为如果可能的话,我不想弄乱NamespacePrefixMapper(如果它甚至可以工作)。

所以问题是:是否可以使用JAXB生成XML,该JAXB对多个名称空间使用相同的前缀以及如何使用?

0 个答案:

没有答案