【发布时间】:2011-12-02 15:41:55
【问题描述】:
我有一个 XML,它的标签对应于三种类型的 Java 对象,这些对象将从 XML 创建。对象的形式为:
A
- static Map<String, A>
- String name
- String aInfo1
- String aInfo2
B
- static Map<String, B>
- String name
- String bInfo1
- String bInfo2
C
- A aObject
- B bObject
现在,在我的 XML 中,我为 A 对象和 B 对象定义了一个标签列表,然后我为 C 对象定义了标签,这些标签使用那里的名称字段引用 A 和 B 对象。 我有两个要求:
- 在 A 和 B 中填充静态映射,同时从 XML 中读取 A 和 B 对象。这些映射将分别包含 A.name 到 A 和 B.name 到 B 的映射。
- 通过从 XML 标记中读取 A.name 和 B.name 来填充 C 对象,然后使用 A 和 B 对象中定义的映射。
我已经阅读了一些 Java 框架,例如 JAXB,但是我无法想出一种方法来从我的 XML 创建这种类型的对象。是否有 Java 框架可以开箱即用或以最少的逻辑执行此操作?
编辑:
还有一个要求: 我需要定义形式的 D 和 E 对象
D
- Map<A, E>
我将定义 E 对象,类似于在 web.xml 中定义 servlet 的方式,即首先定义 E 类的名称和类,然后在其他地方使用 E 的名称。此外,传递参数以实例化 E 对象。标签看起来像:
<E>
<name>queryProcessor</name>
<class>com.mydomain.QueryProcessor</class>
</E>
现在这将在 D 中定义 Map 的内容时使用
<D>
<map>
<A>name_of_some_A_object</A>
<E name="queryProcessor">
<param1>name_of_some_B_object</param1>
<param2>name_of_some_B_object</param2>
</E>
<A>name_of_some_A_object</A>
<E name="queryProcessor">
<param1>name_of_some_B_object</param1>
<param2>name_of_some_B_object</param2>
</E>
</map>
</D>
本质上,D 中的映射将通过实例化一个基类型 E 的类来填充,该类使用传递给它的参数和一个由其名称引用的 A 的对象。
【问题讨论】:
-
那个 XML 有多大? (如果它小于大约 20MB,你可以使用比它更大的更简单的结构)
-
不幸的是,“静态”不能很好地转换为 XML。
-
它非常小,它将填充大约 10 到 20 个 A 和 B 对象,以及大约 20-25 个 C 对象。我猜不到 100k
-
对于这样一个简单的结构,自己做会简单得多:使用 XPath 并填充对象。
-
我同意,但这只是开始。随着我的 XML 的发展,还会出现许多其他复杂的情况。我希望找到一些可以在处理其余部分的同时在几个地方连接一些逻辑的东西。