2010-10-28 37 views
1

我有在架構元素下列屬性的模式:JAXB Java 6中沒有前綴正確的命名空間前綴編組XML文件

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:abc="http://abc.example.com" targetNamespace="http://abc.example.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> 

我可以編譯它,並得到Java類。使用這些類,我在對象中填充數據並將其編組以獲取XML文件。

但是這個編組文件中的XML元素沒有前綴「abc」。

我在編組時使用了XMLStreamWriter.setPrefix稍微調整了一下,我可以得到所有元素前綴爲「abc」的XML文件。

現在,當我試圖來解讀同一個XML文件,它拋出錯誤說:

[org.xml.sax.SAXParseException:前綴「ABC」的元素「ABC:名稱」未綁定]

請幫助我如何讓JAXB知道abc是正確的前綴。

謝謝 普拉迪普

回答

1

前綴的名字是毫無意義的。它所做的只是在命名空間和屬於該命名空間的標籤之間建立連接。無論前綴是abc還是namespace01或者沒有前綴,因爲使用默認命名空間並不重要。據我所知,你不能在JAXB中強制使用前綴或前綴的具體名稱。

+1

感謝musiKk,現在我明白了。 但是,如果我們想要使用我們自己定義的前綴,我們可以使用包含NamespacePrefixMapper的JAXB RI以及來自Java 6的JAXB。[在類路徑中包含JAXB RI]。 marshaller.setProperty(「com.sun.xml.bind.namespacePrefixMapper」,new NamespaceMapper()); – pradeep 2010-10-30 04:57:00

+1

@pradeep:很好。即使你讓自己依賴於一個特定的實現,也很好理解。 – musiKk 2010-11-01 08:35:53

+0

不要完全同意「無意義」的部分。從技術角度來看,這可能是「無意義的」。但是,假定例如 - 以任何方式 - 人類將看到或使用XML,能夠以有意義的方式設置命名空間前綴可能很重要。 – mmey 2014-03-23 20:54:28