我使用JCR会话接口将一个节点(JCR规范中的一个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表示“Could not find child 029d9c48-5825-4d49-bb4c-2ebb94f73df4 of node e33ea15d-1735-49ed-a2bc-3d18de04864d”。
我已经检查了XML文件的内容,并且那个子节点UUID不在那里,所以我不知道它来自何处。只有当指定条件IMPORT_UUID_COLLISION_REPLACE_EXISTING时,才会出现此问题。如果我在导入时创建新的UUID,它可以正常工作(尽管它创建了一个重复的节点副本)。XML文件本身似乎是有效的,因为我已经测试过通过控制台上的“importing”特性导入它,并且它成功地导入了它。任何帮助都将不胜感激。
更新:
之所以会出现这个问题,是因为在调用importContent()方法之前,我调用了一个单独的方法,该方法删除了path位置上的一个现有节点,但没有保存更改。然而,这并不是一个理想的修复方法,因为如果在importContent()期间出了问题,我希望能够回滚事务。在调用importXML方法之前,我尝试过刷新会话,但是这导致了同样的问题-- InvalidStateException
发布于 2020-09-07 08:56:33
很难说,但这可能是一个索引错误。我建议您运行索引一致性检查或重建索引。如果不是这样的话,也请提供完整的堆栈跟踪。
https://stackoverflow.com/questions/63773552
复制相似问题