Jaxb 如何使用自定义名称空间前缀

Jaxb 如何使用自定义名称空间前缀,jaxb,Jaxb,我是JAXB的新手。我能够填充XML。在我的例子中,我需要名称空间前缀作为 <set xmlns="www.google.com" xmlns:myName="www.google.com"> 而不是 <set xmlns="www.google.com" xmlns:ns2="www.google.com"> 我使用了packageinfo类和@XmlType注释。我是否需要添加任何变量来获得第二个名称空间(如“xmlns:MyName”而不是“

我是JAXB的新手。我能够填充XML。在我的例子中,我需要名称空间前缀作为

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

而不是

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


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

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

如果您使用的是JAXB提供商或JAXB RI的最新版本,则可以执行以下操作:

套餐信息

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

@XmlSchema(
namespace=“www.google.com”,
elementFormDefault=XmlNsForm.QUALIFIED,
xmlns={
@XmlNs(namespaceURI=“www.google.com”,前缀=”),
@XmlNs(namespaceURI=“www.google.com”,prefix=“myName”),
})
包装为13817126;
导入javax.xml.bind.annotation.*;
Java模型

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

用于UM13817126的包;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
公共类集{
}
演示代码

下面的演示代码将创建域模型的实例并将其封送到XML

用于UM13817126的包;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Set.class);
集合=新集合();
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
封送员。封送员(集合、系统、输出);
}
}
输出

下面是运行演示代码的输出


了解更多信息


+1-我在回答中包含了一个完整的例子:我尝试使用XmlSchema(namespace=“”,xmlns={@xmlns(prefix=“”,namespaceURI=“”),@xmlns(prefix=“image”,namespaceURI=“”)},elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED),我仍然得到了默认的ns2前缀。我试图对扩展的NamespacePrefixMapper进行分类,但得到了javax.xml.bind.PropertyException:name:com.sun.xml.bind.NamespacePrefixMapper值:这个异常我使用的是jre 6、tomcat 6.0.35和jaxb-api-2.2.6.jar