如何拥有自定义命名空间前缀

时间:2012-12-11 09:22:10

标签: jaxb

我是JAXB的新手。我能够填充XML。在我的情况下,我需要我的名称空间前缀为

<set xmlns="www.google.com"
   xmlns:myName="www.google.com">

而不是

<set xmlns="www.google.com"
   xmlns:ns2="www.google.com">

我使用了package-info类和@XmlType注释。我是否需要添加任何变量来获取第二个命名空间的所需名称,如“xmlns:MyName”而不是“xmlns:ns2”?

2 个答案:

答案 0 :(得分:2)

如果您使用EclipseLink JAXB (MOXy)作为JAXB提供程序或最新版本的JAXB RI,那么您可以执行以下操作:

<强>包信息

您可以在@XmlNs注释的xmlns属性上使用@XmlSchema注释来指定命名空间的前缀。

@XmlSchema(
    namespace="www.google.com",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns={
        @XmlNs(namespaceURI = "www.google.com", prefix = ""),
        @XmlNs(namespaceURI = "www.google.com", prefix = "myName"),
    })
package forum13817126;

import javax.xml.bind.annotation.*;

Java模型

下面是一个简单的Java模型,我将在本例中使用它。

package forum13817126;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Set {

}

演示代码

以下演示代码将创建域模型的实例并将其编组为XML。

package forum13817126;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Set.class);

        Set set = new Set();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(set, System.out);
    }

}

<强>输出

以下是运行演示代码的输出。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myName:set xmlns="www.google.com" xmlns:myName="www.google.com"/>

了解更多信息

答案 1 :(得分:1)

您需要在xmlns中的@XmlSchema注释中添加package-info属性。它的值是一个注释数组,为marshaller提供建议的前缀映射。虽然技术上允许忽略这些建议,但我发现只要没有冲突(两个不同的包暗示不同URI的相同前缀),它们通常都会得到尊重。