2010-08-09 62 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" /> 

但你需要自己检查重复密钥。