2013-07-04 76 views
4

我有一个ATOM-XML表示我的数据是通过Spring MVC Web服务返回的。我正在使用JAXB进行序列化,我有一些命名空间,但是我希望默认名称空间设置为Atom且没有前缀。这里是我到目前为止在package-info.java,但原子前缀被设置为ns3。如何使用JAXB设置默认名称空间

@XmlSchema(namespace = com.mycomponay.foo.ATOM_NAMESPACE, 
xmlns = { 
    @XmlNs(prefix = "foo", namespaceURI = com.mycomponay.foo.NAMESPACE_FOO), 
}, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.mycompany.web; 

import javax.xml.bind.annotation.XmlNs; 

另外我注意到名称空间显示在chrome中,但不是在Firefox中。

+0

只是好奇:你为什么介意使用什么命名空间前缀? – flup

回答

6

尝试添加一个@XmlNs注释,其前缀为"",用于要作为默认值显示的命名空间。

@XmlSchema(
    namespace = com.mycompany.foo.ATOM_NAMESPACE, 
    xmlns = { 
     @XmlNs(prefix = "", namespaceURI = com.mycompany.foo.ATOM_NAMESPACE), 
     @XmlNs(prefix = "foo", namespaceURI = com.mycompany.foo.NAMESPACE_FOO) 
    }, 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.mycompany.web; 

import javax.xml.bind.annotation.*; 

注:

@XmlSchema注释所指定的名称空间是为了影响XML模式的生成,并且当对象模型编组到XML不能保证使用。但是EclipseLink JAXB (MOXy)JAXB reference implementation的最新版本将尽可能使用它们。

更多信息

+0

谢谢Blaise,但是这并不奏效,ATOM命名空间被设置为'ns4'。我使用Spring MVC,它使用'Jaxb2RootElementHttpMessageConverter'我试图扩展它,并添加使用我的自定义'NamespacePrefixMapper'设置'com.sun.xml.internal.bind.namespacePrefixMapper'属性,但没有运气。 – user86834

+0

我得到它与我的自定义'NamespacePrefixMapper'一起工作,它正在被调用。现在我遇到了另一个问题,到我的自定义'NamespacePrefixMapper'被调用时,空的前缀已经被'JAXBContextImpl'中的'defaultNsUri'硬编码。有没有人知道这个问题的解决方案? – user86834

+0

首选不是'XMLConstants.DEFAULT_NS_PREFIX'吗? –

1

,如果你正在使用的XML元素单独的类,命名空间= “”,将努力对其进行批注。

相关问题