在Alfresco中使用FileFolderService创建文件时出错

时间:2012-12-10 17:51:08

标签: createfile

我正在尝试使用alfresco中的FileFolderService创建一个文件,但我得到了异常,下面提供了详细信息。所以任何人都可以帮助我!

网站名称:mysite 文件名:将作为请求参数和新文件传递,传入的值将在站点的文档库中创建。

代码段:

ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry");
FileFolderService fileFolderService = serviceRegistry.getFileFolderService();
String fileName = req.getParameter("fileName");
NodeRef folder = new NodeRef("avm://mysite/-1;www;avm_webapps;ROOT;documentLibrary");
fileFolderService.create(folder, fileName, ContentModel.TYPE_CONTAINER);

抛出异常:

ERROR [extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-4] Exception from executeScript - redirecting to status template error: 11100002 Wrapped Exception (with status template): 11100016 Invalid node type for AVM.
 org.springframework.extensions.webscripts.WebScriptException: 11100002 Wrapped Exception (with status template): 11100016 Invalid node type for AVM.
    at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1067)
    at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
    at org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:433)
    at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:433)
    at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:495)
    at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:533)
    at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:349)
    at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:377)
    at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
    at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:118)

1 个答案:

答案 0 :(得分:3)

您正尝试使用类似AVM的路径访问DM存储库中的项目。如果您不理解两者之间的差异,那么我建议您做一些背景阅读,例如 Professional Alfresco 书。

您可以尝试类似下面的代码,但我自己没有测试过。

String siteName = "blah", newFile = "My New File";
String path = "app:company_home/st:sites/cm:" + siteName + "/cm:documentLibrary";
List<String> pathElements = Arrays.asList(str.split("/"));
NodeRef rootNode = nodeService.getRootNode(new StoreRef("workspace", "SpacesStore"));
NodeRef dlNode = fileFolderService.resolveNamePath(rootNode, pathElements);
NodeRef newNode = fileFolderService.create(dlNode, newFile, ContentModel.TYPE_CONTENT).getNodeRef();

您需要为节点设置一些属性和内容,但这至少会为您创建。您可以在Alfresco FirstFoundationClient SDK项目中找到更多示例。

注入对象nodeServicefileFolderService的确切方式取决于运行代码的容器,但是在Java支持的Web脚本的情况下,您可以通过Spring注入依赖项通过引用NodeServiceFileFolderService bean来配置。如果可以的话,尽量避免使用serviceRegistry