2013-07-04 79 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元素單獨的類,命名空間= 「」,將努力對其進行批註。

相關問題