MarkLogic to Java & Back Solution



我需要从MarkLogic服务器中查询XML并将其封送到Java对象中。做这件事的好方法是什么?具体来说:

  1. 使用MarkLogic对XML技术栈有影响吗?(即是否有一些关于MarkLogic导致不同的方法来搜索,读取和编写XML片段?)
  2. 我应该使用XML api之一处理XML自己还是有一个更简单的方法?
  3. 是否值得使用JAXB ?

有人问了一个很好的问题,为什么我使用Java。我正在使用Java/Java EE,因为我最擅长这种语言。这是一个人的项目,我不想被困在任何地方。该项目将开发web服务api以及数据处理和转换(CSV到XML)功能。Java/Java EE可以很好地做到这一点,并且做得很优雅。

注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2 (JSR-222)专家组的成员。

使用MarkLogic对XML技术栈有什么影响吗?(也就是说,是否有一些关于MarkLogic的东西导致了不同的搜索、读取和编写XML片段的方法?)

可能。一些对象到xml库比其他库支持更多种类的文档。MOXy利用基于XPath的映射,使其能够处理更多种类的文档。下面是一些例子:

  • http://blog.bdoughan.com/2010/09/xpath-based-mapping-geocode-example.html
  • http://blog.bdoughan.com/2011/03/map-to-element-based-on-attribute-value.html

我是否应该使用其中一个XML api自己处理XML一个更简单的方法?

使用框架通常更容易。Java SE提供了许多处理XML的标准库:JAXB (javax.xml.bind)、XPath (javax.xml.xpath)、DOM、SAX、StAX。由于这些标准,也有其他实现(即MOXy和Apache JaxMe实现JAXB)。

  • http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html

是否值得为此使用JAXB ?

是的。

有许多XML-> Java对象编组库。我想你可能想通过搜索一般的Java XML编组/解组问题来寻找这个问题的答案,就像这样:

Java绑定Vs手工定义类

你的用例仍然不是很清楚,尽管标题编辑有帮助——如果你正在寻找Java连接,你可能还想看看http://developer.marklogic.com/code/mljam,它允许你从MarkLogic XQuery中执行Java代码。

XQSync使用XStream。据我所知,JAXB更强大——但也更复杂。

使用JAXB解组来自XQuery的xml已经有5年了,我不得不说我发现它非常有用并且节省时间。至于复杂性,它很容易学习和使用,可能是你使用它的90%。我在简单和复杂的模式中都使用过它,发现它非常高效且节省时间。在MarkLogic中执行Java代码通常是不可能的,因为它运行在MarkLogic服务器上的单独VM中,所以它确实不能利用来自(比如说)Java EE web应用程序的任何会话状态或库。使用JAXB,可以很容易地获取结果流并将其转换为Java对象。我真的不知道该说什么好。它使我的开发工作变得无比容易,并允许您利用Java来做它最擅长的事情(跨各种技术和平台的丰富集成、高级业务逻辑、用于繁重处理工作的快速内存管理等),同时仍然使用XQuery来做它最擅长的事情(即搜索和转换内容)。

使用MarkLogic对XML技术栈有什么影响吗?

。当它从MarkLogic出来的时候,它只是可以来自任何地方的XML。

我需要查询XML并将其编组到Java对象中。

为什么?

如果你有一个很好的理由使用Java,那么我们需要知道这个理由是什么,然后我们才能告诉你哪种Java技术是合适的。

如果您没有使用Java的充分理由,那么您最好使用高级XML处理语言,如XSLT或XQuery。

对于JAXB,当您的模式相当简单和稳定时,它是合适的。如果模式很复杂(例如,学术期刊上文章的模式),那么JAXB可能会因为生成的类数量过多而笨拙不堪。使用它来处理XQuery输出的一个问题是,XQuery输出很可能不符合任何已知的模式,并且对于编写的每个查询,XQuery结果的结构将不同。

最新更新