2010-01-25 132 views
2

我正在使用JAXB從Java對象生成XML,它是一個實時,相當高的消息速率應用程序,並且大多數時間都正常工作。然而偶爾,並沒有任何明顯的線索,爲什麼,我在生成的XML中獲得重複的名稱空間聲明。例如:JAXB生成的XML中的重複名稱空間聲明

<UpdateRequest xmlns="http://xml.mycomp.com/ns/myservice" 
       xmlns="http://xml.mycomp.com/ns/myservice"> 
    <field1>value</field1> 
    ... 
</UpdateRequest> 

有沒有人見過這種行爲?

+1

奇怪...你可以發佈生成此XML的JAXB註釋的java類嗎? – skaffman 2010-01-25 09:54:38

+0

我也想要,但我不認爲公司會喜歡它。奇怪的是,99.9%的對象被編組的時間確定,那麼偶爾我們會遇到這個問題。我們現在假設多線程問題.. – ashbyp 2010-01-28 18:11:46

回答

0

檢查此類的xsd代碼是否允許創建多個重複屬性的實例。如果是這樣,您可以避免這種重複設置每個UpdateRequest對象的屬性實例的數量。

如果問題出在你的代碼上(也許有兩次創建這個屬性),並且你限制了屬性實例的數量(如我上面所說的),程序會在運行時顯示錯誤,抱怨你試圖插入已經定義的屬性。

+0

謝謝,但它不是一個重複的屬性,它是XML頂層元素中重複的xmlns =「blah」 – ashbyp 2010-01-28 18:12:44

0

解決方案可能在此link處可用。

這裏的相關部分從上面的鏈接逐字引述可能對您相關:

如果您在使用實例化一個JAXB 元素在實例文檔中的元素 架構 類型的類似明確納入發生一些 (抽象)XML模式基本類型的對象,因此 該元素將具有基本類型的元素標記 。

二忌的xs:anySimpleType因爲 這也將創建多個 引用結合到 的xsi和xs的命名空間,以及類型屬性包含實際類型 。你 失去了在Java類中已經輸入 領域的JAXB的優勢,使 你失去所有的檢查Java編譯器 可能會做,併爲 解組,你必須自己處理 所有的轉換。