JCR importXML方法在Hip​​poCMS上引发InvalidItemStateException

问题描述

我正在使用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

解决方法

很难确定,但这可能是索引错误。我建议您运行索引一致性检查或重建索引。如果不是这种情况,还请提供完整的堆栈跟踪。

https://documentation.bloomreach.com/13/library/administration/maintenance/checking-and-fixing-index-inconsistencies.html