在alfresco中创建文件时处理文件名重复
我在repo层有一个支持Java的webscript,它在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
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();
}