如何在Jackrabbit的root下直接导入系统视图XML?

时间:2015-03-10 11:48:39

标签: jcr jackrabbit

我有一个来自ModeShape(4.1)存储库的系统视图XML转储,我尝试导入到Jackrabbit(2.8)。

我的XML的根节点包含一个名为" jcr:root"的节点。 (但我已经评论了" jcr:uuid"和" jcr:primaryType"("模式:root"),因为Jackrabbit似乎并不喜欢这些)。

我使用以下方法导入XML:

session.importXML("/", stream, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);

XML看起来像(我已经把它弄得一团糟,因为我在一个封闭的网络上,所以无视名称空间,他们没关系: - ):

<?xml version="1.0" encoding="UTF-8" ?>
<sv:node xmlns:jcr=".../jcr/1.0" xmlns:sv=".../sv/1.0" ... sv:name="jcr:root">
   <!-- jcr:uuid and jcr:primaryType properties commented out... -->
   <sv:node sv:name="Messages">
      ...
   </sv:node>
</sv:node>

将此导入Jackrabbit可以正常工作,但是,导入会创建一个名为&#34; jcr:root&#34;的新节点。 (包含&#34; Messages&#34;)在真实存储库根节点下,而不是放置&#34;消息&#34;直接位于存储库根节点下的节点(如ModeShape所做的那样)。

即,我得到:

/jcr:root/Messages

而不是我的预期:

/Messages

(我也尝试使用&#34; jcr:uuid&#34;匹配Jackrabbit存储库和IMPORT_UUID_COLLISION_REPLACE_EXISTING的设置,但是有一个例外,根节点无法替换。)

如何在根节点下直接将其导入Jackrabbit?

更新:

在阅读JCR spec, section 11.9, "Importing jcr:root"时,似乎Jackrabbit和ModeShape都做对了。虽然我有点像ModeShape的行为。

Jackrabbit似乎表现得像IMPORT_UUID_CREATE_NEW所说的那样(并且没有特别对待jcr:root。如果我使用当前存储库根节点的值添加jcr:uuid属性,则它按指定的方式工作。

ModeShape只是合并根,并且似乎根本不关心碰撞(这实际上是合理的,但不是根据规范中定义的任何行为)。

......或者我错了? : - )

1 个答案:

答案 0 :(得分:1)

我应该尝试的一个明显的解决方案是将“Messages”节点移动到XML文档的根目录。

<?xml version="1.0" encoding="UTF-8" ?>
<sv:node sv:name="Messages" xmlns...>
   ...
</sv:node>

(不幸的是,我在根目录下有多个节点,因此我需要创建多个XML导出。不优雅,但可能是可行的。)