所以我搜索了很多關於這個特定問題的解決方案,我希望有人能指出我的方向。缺少名稱空間定義的JAXB問題
我們以XML格式接收數據,而我們只有XSD來驗證數據。所以我使用JAXB來生成Java類。當我去解組示例XML時,發現缺少一些屬性值。事實證明,模式期望這些屬性是QName,但是數據提供者沒有在XML中定義前綴。
例如,一個XML屬性值爲"repository:<uuid>"
,但名稱空間前綴「存儲庫」從未在數據集中定義。 (不要介意提供商的最佳做法建議定義它!)
所以,當我去解組樣本集,具有指定前綴(在我上面的示例中的「儲存庫」)的QName屬性是NULL!所以它看起來像JAXB是「拋出」那些具有未定義名稱空間前綴的屬性QName值。我很驚訝,它甚至不保留本地名稱。
理想情況下,我想保持原樣,但看起來我無法在綁定時將QName映射到字符串(從Schema到Java)。
我嘗試了「手動」將名稱空間定義插入到XML中,它的工作方式就像一個魅力。這樣做最簡單的方法是什麼?
有沒有辦法在運行時「插入」命名空間映射/定義?或者在綁定時「全局」定義它?
我強烈建議您發佈CSD和XML文檔的相關部分。您接收的XML仍然很可能與XSD不一致,而這對於JAXB的非編組將會是一個問題。如果您已經確定XML實際上符合XSD(例如使用在線驗證工具),請說出來(以便SO助手避開它)。 – 2014-08-29 02:53:48
我想知道我是否應該提供一些更多的細節,但在我的平板電腦上有點困難。下次我會提供代碼的實際出價。感謝您的反饋。 – raydogg 2014-08-29 21:55:39