2010-01-11 46 views
5

我需要从Java对象中生成一些XML文档。这些对象是深度ORM映射对象,XML文档用于搜索索引(la Lucene)。我希望能够创建一个配置文件并为其提供一个Java对象,并让它吐出配置中指定的XML。理想情况下,配置将包括java端(可能是深层)的属性到XPath的映射或非常类似于XML端的映射。什么是从Java生成任意XML的好库?

JAXB不合适,因为它想要创建从对象数据到XML节点的一对一映射。我已经看过JIBX和XStream,但是他们都没有被设计来做我正在谈论的事情。

基本上我想要的是Dozer,但是它的目的是创建一个XML文档作为它的目标而不是另一个Java bean。从我迄今为止的研究看来,我将不得不自己写这篇文章。任何人都可以提供更好的选择?

编辑: 该解决方案不能预测修改源Java文件的能力。基于注释的系统对我的目的来说是完全无用的。应该可以像在推土机上一样为各个映射定义'译员'。

需要注意的是,我需要能够指定java中给定的输入字段可能会在XML输出中的多个不同位置输出,可能在某些情况下会被转换,而在其他情况下可能会被转换。

我已经考虑过做某种直接的Java到XML转换的对象,然后使用XSLT执行我的任务,但问题在于这些是具有双向连接的深层对象。将对象映射到XML将很难确定对象层次结构的深度,即使它可以跟踪哪些对象应该打折,因为它们已经被看到了。

+0

JiBX应该对此好,你为什么不喜欢它? – skaffman 2010-01-11 23:35:06

回答

4

我用这个: Simple

+0

这似乎完全是基于注释的。我希望能够严格通过配置文件和潜在的一组翻译器对象来完成我的目标,以正确格式化一些数据。此外,我没有看到任何指定单个输入属性到多个输出字段的方式。 – Jherico 2010-01-11 21:11:14

+0

upvoted,因为这确实回答了原来的问题。 – 2010-01-11 21:14:50

+0

并非如此。我认为我很明显我*想要一个配置文件。 – Jherico 2010-01-11 21:39:11

1

你看着Castor

特别是,从他们的网页的这句话让我觉得它可能会做你想要什么:

虽然可以依靠Castor的默认行为编组和取消编组Java对象转换为XML文档,可能需要对此行为有更多的控制权。例如,如果Java对象模型已经存在,那么Castor XML Mapping可以用作XML文档和该Java对象模型之间的桥梁。

蓖麻允许指定某些使用映射文件其编组/解组行为。该文件向Castor提供了有关给定的XML文档和给定的一组Java对象如何相互关联的明确信息。

另一种可能性可能是JXM;从他们的网页:

Java XML映射(JXM)是一种将Java对象写入XML并将其读回的工具。 JXM提供了一个默认映射,以便通过调用单一方法将遵循Java Bean命名约定的Java对象写入XML。默认映射可以通过使用JXM框架创建和注册映射类来定制。

JXM不同于其他XML绑定工具,不需要对象包含或继承JXM代码。对象中不包含生成的代码,并且它们不需要实现JXM接口。定制是通过编写Java代码而不是XML描述符来完成的。

+0

Castor看起来最接近我所看到的所有东西。但是,其以类为中心的配置让我怀疑它是否允许将相同输入字段映射到多个输出。我也看不到任何映射深层领域的例子。但我会进一步调查。 – Jherico 2010-01-11 21:37:55

0

看一看Xmappr

它可以通过外部XML配置。你可以有几个映射从同一个输入对象产生不同的输出。

此外,我们愿意帮助 - 只需在邮件列表上询问。

0

过去我们使用Apache Velocity作为简化它的一种手段。

只需为XML创建模板,填充数据结构并在地图中插入数据结构即可。它允许您在需要时在运行时更改XML(只要您的数据结构具有所有字段)。

这是一种非常快速和灵活的方式来生成一个文档,它不创建一个DOM,所以是非常简洁的内存。

+0

不利的一面是,如果你搞砸了模板,在某些情况下你最终可能会生成无效/不正确的XML。 – 2010-01-12 07:36:00

+0

完全同意。这并不难解决。如果您愿意,您可以添加一个单独的验证阶段。 – Fortyrunner 2010-01-13 11:21:41

0
0

你不指定ORM使用,但如果万一它是休眠,你可以用它做Java的< - > XML映射为好。该文档不如数据库映射,但它不是很难使用。最大的好处是:你少了一点依赖性,少一个学习框架,以及你为DB映射学到的概念,直到大多数应用于XML映射。

看到:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html

相关问题