Java Jackrabbit将XML导入CMS失败-没有<;的子节点定义;myNode>;在节点中找到
我正在使用CMS,并使用Java Jackrabbit将XML导入CMS失败-没有<;的子节点定义;myNode>;在节点中找到,java,xml,spring-boot,content-management-system,jackrabbit,Java,Xml,Spring Boot,Content Management System,Jackrabbit,我正在使用CMS,并使用JCR会话接口的Jackrabbit实现导入内容。CMS本身就是河马(现在是Bloomreach)。使用Hippo控制台,我可以将节点及其子节点导出到XML文件中。文件本身是格式良好的XML,当我使用控制台重新导入XML中指定的节点时,它工作正常 为了证明概念,我使用了以下代码来确保我对会话接口的使用正常,这成功地导入了我导出的XML Node node = cmsSession.getNode(path); node.addNode("test",
JCR
会话
接口的Jackrabbit
实现导入内容。CMS本身就是河马(现在是Bloomreach)。使用Hippo
控制台,我可以将节点及其子节点导出到XML
文件中。文件本身是格式良好的XML
,当我使用控制台重新导入XML
中指定的节点时,它工作正常
为了证明概念,我使用了以下代码来确保我对会话
接口的使用正常,这成功地导入了我导出的XML
Node node = cmsSession.getNode(path);
node.addNode("test", "nt:unstructured");
return cmsSession.importContent(image, path + "/test");
如您所见,我只是在CMS中的给定位置创建了一个名为“test”的非结构化节点(由“path”变量的内容指定)。此代码成功地将XML
文件导入到“test”节点
我遇到的问题是当我指定一个不同的导入位置时。导出的XML
是从包含图像节点和图像数据的Hippo句柄节点导出的。我使用以下代码创建句柄节点
public Node createHandle(Node basedir, String handleName) throws CMSException {
try {
Node handleNode = basedir.addNode(handleName,”hippo:handle”);
handleNode = addMixins(handleNode,”hippo:named, mix:referenceable”);
return handleNode;
} catch (RepositoryException e) {
//handling
}
}
然后这是我调用importXML
方法的代码。在此阶段,我已经将要导入的XML
文件的内容转换为字节数组
@Override
public boolean importContent(byte[] content, String cmsPathToImportInto) throws JCRSessionException {
validateSession();
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(content);
session.importXML(cmsPathToImportInto, inputStream, IMPORT_UUID_COLLISION_REMOVE_EXISTING);
inputStream.close();
session.save();
return true;
} catch (RepositoryException e) {
e.printStackTrace();
//handling
} catch (IOException e) {
log.error("Unable to read from byte array");
return false;
}
}
由此产生的错误是
javax.jcr.nodetype.ConstraintViolationException:在org.apache.jackrabbit.rmi.server.ServerObject.getRepositoryException(ServerObject.java:109)的org.apache.jackrabbit.rmi.server.ServerSession.importXML(ServerSession.java:295)节点中找不到的子节点定义。
在创建句柄节点时,似乎没有为其设置子节点,但我不确定哪些属性控制子节点的创建
感谢您的帮助最后,我无法找到解决眼前问题的方法。我可以通过创建一个临时的、非结构化的节点来最初导入XML,然后使用
session.move()
方法将该节点的内容移动到所需的位置来找到解决方法。最后,我无法找到解决眼前问题的方法。我可以通过创建一个临时的、非结构化的节点来最初导入XML,然后使用session.move()
方法将该节点的内容移动到所需的位置来找到解决方法