在alfresco中创建文件时处理文件名重复

在alfresco中创建文件时处理文件名重复,alfresco,alfresco-webscripts,Alfresco,Alfresco Webscripts,我在repo层有一个支持Java的webscript,它在Alfresco的给定文件夹中创建文件(具有给定名称) 为了处理文件名重复问题,我编写了以下代码: NodeRef node = null; try { node = createNode(fullName, folderNodeRefId); } catch (DuplicateChildNodeNameException e) { System.out.p

我在repo层有一个支持Java的webscript,它在Alfresco的给定文件夹中创建文件(具有给定名称)

为了处理文件名重复问题,我编写了以下代码:

NodeRef node = null;
        try {
            node = createNode(fullName, folderNodeRefId);
        } catch (DuplicateChildNodeNameException e) {
            System.out.println("Catched");
            boolean done = false;
            for (int i = 1; !done; i++) {
                String newName = filename + "_" + i + "." + fileFormat;
                System.out.println("Duplicate Name. Trying: " + newName);
                try {
                    node = createNode(newName, folderNodeRefId);
                    done = true;
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
        System.out.println("Done");
        ContentWriter writer = serviceRegistry.getContentService().getWriter(node, ContentModel.PROP_CONTENT, true);
        writer.setMimetype(getFileFormatMimetype(fileFormat));
        writer.putContent(inputStream);
        writer.guessEncoding();

private NodeRef createNode(字符串文件名,字符串folderNodeRefId)
引发InvalidNodeRefeException、InvalidTypeException、InvalidQNameException{
System.out.println(“In”+文件名);
NodeRef folderNodeRef=新的NodeRef(folderNodeRefId);
Map props=新的HashMap(1);
put(ContentModel.PROP_名称、文件名);
返回serviceRegistry.getNodeService()
.createNode(folderNodeRef,ContentModel.ASSOC_包含,
createQName(NamespaceService.CONTENT\u MODEL\u 1\u 0\u URI,文件名),ContentModel.TYPE\u CONTENT,
道具)
.getChildRef();
}
如果没有文件名重复(新名称),代码工作得非常好。但是,当存在复制时,它什么也不做,尽管它执行时没有任何错误!当我测试它时,它不会抛出任何异常,但也不会创建任何文件

关于那件事的原因有什么线索吗


谢谢,

我测试了这段代码,它运行得很好

@Test
public void createNode() {
    AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER_NAME);
    NodeRef node = null;
    String fileFormat = "txt";
    String filename = "test";
    NodeRef folderNodeRef = getCompanyHome();
    //Create first node
    node = createNode(filename, folderNodeRef);
    try {
        node = createNode(filename, folderNodeRef);
    } catch (DuplicateChildNodeNameException e) {
        System.out.println("Catched");
        boolean done = false;
        for (int i = 1; !done; i++) {
            String newName = filename + "_" + i + "." + fileFormat;
            System.out.println("Duplicate Name. Trying: " + newName);
            try {
                node = createNode(newName, folderNodeRef);
                done = true;
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
    System.out.println("Done");
}

private NodeRef getCompanyHome()    {
    return nodeLocatorService.getNode("companyhome", null, null);
}

private NodeRef createNode(String filename, NodeRef folderNodeRef) throws InvalidNodeRefException, InvalidTypeException, InvalidQNameException {
    System.out.println("In " + filename);
    Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
    props.put(ContentModel.PROP_NAME, filename);
    return serviceRegistry.getNodeService().createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS,
            QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, filename), ContentModel.TYPE_CONTENT,props).getChildRef();
}
@测试
public void createNode(){
AuthenticationUtil.setFullyAuthenticatedUser(管理员用户名);
noderefnode=null;
字符串fileFormat=“txt”;
字符串filename=“test”;
NodeRef folderNodeRef=getCompanyHome();
//创建第一个节点
node=createNode(文件名,folderNodeRef);
试一试{
node=createNode(文件名,folderNodeRef);
}捕获(DuplicateChildNodeNameException e){
System.out.println(“捕获”);
布尔完成=假;
for(int i=1;!done;i++){
字符串newName=filename+“”+i+”+fileFormat;
System.out.println(“重复名称。尝试:+newName”);
试一试{
node=createNode(newName,folderNodeRef);
完成=正确;
}捕获(异常e1){
e1.printStackTrace();
}
}
}
系统输出打印项次(“完成”);
}
私有节点ref getCompanyHome(){
返回nodeLocatorService.getNode(“companyhome”,null,null);
}
私有NodeRef createNode(字符串文件名,NodeRef folderNodeRef)引发InvalidNodeRefException、InvalidTypeException、InvalidQNameException{
System.out.println(“In”+文件名);
Map props=新的HashMap(1);
put(ContentModel.PROP_名称、文件名);
返回serviceRegistry.getNodeService().createNode(folderNodeRef,ContentModel.ASSOC_包含,
createQName(NamespaceService.CONTENT\u MODEL\u 1\u 0\u URI,文件名),ContentModel.TYPE\u CONTENT,props.getChildRef();
}

如果是我,我会尝试捕捉nodeService调用中的任何异常,看看我得到了什么。从那里开始工作。另一个选项可能是检查节点在创建之前是否已经存在(我知道为什么这可能不理想,但这是一个选项)。我尝试过,它不会引发任何其他异常。您是通过Spring配置注入公共NodeService bean还是私有NodeService bean(大写差异)?我是注入“ServiceRegistry”通过Spring配置获取bean并从中获取NodeService。(serviceRegistry.getNodeService())该代码不会导致任何错误或异常。我试过你的测试,它通过了,但没有创建文件。
@Test
public void createNode() {
    AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER_NAME);
    NodeRef node = null;
    String fileFormat = "txt";
    String filename = "test";
    NodeRef folderNodeRef = getCompanyHome();
    //Create first node
    node = createNode(filename, folderNodeRef);
    try {
        node = createNode(filename, folderNodeRef);
    } catch (DuplicateChildNodeNameException e) {
        System.out.println("Catched");
        boolean done = false;
        for (int i = 1; !done; i++) {
            String newName = filename + "_" + i + "." + fileFormat;
            System.out.println("Duplicate Name. Trying: " + newName);
            try {
                node = createNode(newName, folderNodeRef);
                done = true;
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
    System.out.println("Done");
}

private NodeRef getCompanyHome()    {
    return nodeLocatorService.getNode("companyhome", null, null);
}

private NodeRef createNode(String filename, NodeRef folderNodeRef) throws InvalidNodeRefException, InvalidTypeException, InvalidQNameException {
    System.out.println("In " + filename);
    Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
    props.put(ContentModel.PROP_NAME, filename);
    return serviceRegistry.getNodeService().createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS,
            QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, filename), ContentModel.TYPE_CONTENT,props).getChildRef();
}