2010-08-09 61 views
1

我試圖通過JAXB編組/解組Map<String, Map<String, Serializable>>。有兩個問題: 1. JAXB無法處理複雜的地圖。 2. JAXB無法處理接口(在此上下文中是可序列化的)。 人們應該如何通過JAXB獲取?JAXB和複雜的地圖

+1

問問自己:你期望看到什麼XML作爲輸出? XML是不是代表地圖非常好... – skaffman 2010-08-09 07:32:39

+0

@skaffman:XML可以只要鍵和值是XML表示的代表映射相當不錯: ... ... ... richj 2010-08-09 09:29:39

+0

@richj:我認爲這是糟糕的XML建模。太多的噪音,沒有足夠的信號。 – skaffman 2010-08-09 09:30:57

回答

1

我覺得主要的問題是JAXB接口應該能夠編組地圖< String,ConcreteType>。接口的問題是JAXB解組不知道用什麼具體類型來實現接口。編組流可能不是來自Java代碼,所以流不能包含具體的類型信息。 JAXB將不得不選擇一個實現,並且需要幫助來實現這一點。

JAXB: How should I marshall complex nested data structures

Mapping your favorite class

JBoss Built-in JAXB Providers

這與Web服務編組的通病。一種可靠的方法是使用包含可以在WSDL中精確定義的具體類型的數據傳輸對象進行數據傳輸。您必須在應用程序代碼中映射域對象進出這些DTO,這是一個缺點。這種方法的一個好處是你的應用程序鬆散耦合到數據傳輸格式。

0

據我所知,XML不支持Map類型。所以你可以嘗試像這樣使用

<item key="somekey" value="hello" /> 

但你需要自己檢查重複密鑰。