1

我正在尝试在露天使用 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)
4

1 回答 1

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 项目中找到更多示例。

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

于 2012-12-11T14:35:16.963 回答