问题描述
我正在使用JCR会话界面将节点(JCR specification中的XML文件)导入到我的HippoCMS存储库中。我已经编写了消耗文件的代码,但是很难将其保存到存储库中。在以下代码的session.getWorkspace().importXML()
行中引发了异常。
public boolean importContent(InputStream inputStream,String path) throws JCRSessionException {
try {
session.getWorkspace().importXML(path,inputStream,IMPORT_UUID_COLLISION_REPLACE_EXISTING);
} catch (RepositoryException e) {
throw new JCRSessionException(JCR_REPOSITORY_ERROR,e.getMessage());
} catch (IOException e) {
return false;
}
return true;
}
我要导入的节点的UUID为 e33ea15d-1735-49ed-a2bc-3d18de04864d ,但由于InvalidItemStateException
说{{1} }。
我已经检查了XML文件的内容,并且该子节点UUID不在其中,所以我不确定它来自何处。仅当指定条件“Could not find child 029d9c48-5825-4d49-bb4c-2ebb94f73df4 of node e33ea15d-1735-49ed-a2bc-3d18de04864d”
时,也会发生此问题。如果我在导入时创建新的UUID,则可以正常工作(尽管它会创建节点的副本)。 XML文件本身似乎有效,因为我已经测试过通过控制台上的“ XML导入”功能将其导入,并且可以成功导入。任何帮助将不胜感激。
更新:
之所以出现此问题,是因为在调用IMPORT_UUID_COLLISION_REPLACE_EXISTING
方法之前,我正在调用一个单独的方法,该方法删除了位置importContent()
上的现有节点,但是我没有保存更改。但是,这不是理想的解决方法,因为如果在path
期间出现问题,我希望能够回滚该事务。我尝试在调用importContent()
方法之前刷新会话,但这会导致相同的问题-importXML
解决方法
很难确定,但这可能是索引错误。我建议您运行索引一致性检查或重建索引。如果不是这种情况,还请提供完整的堆栈跟踪。