2012-12-10 16 views
1

我想在戶外使用FileFolderService創建一個文件,但我收到了異常,詳細信息如下。所以任何人都可以幫助我!在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

爲什麼在AVM中查找documentLibrary文件夾?確實,Share用於將儀表板信息存儲在特殊的AVM存儲中,但不再使用,並且文檔庫內容從未存儲在AVM中。 –

+0

Will Abson,謝謝你的快速回復。我只想在「公司首頁> mysite> test」文件夾中創建一個文件。所以你可以讓我在我的代碼中出現什麼問題。或者更好的做法。 – Ramajogi

+0

我可以通過在我的代碼中進行更改來解決此問題,如下所示
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); FileFolderService fileFolderService = serviceRegistry.getFileFolderService(); String fileName = req.getParameter("fileName"); NodeRef folder = new NodeRef("workspace/SpacesStore/Company%20Home/Sites/mysite/Test"); fileFolderService.create(folder, fileName, ContentModel.TYPE_CONTENT); Ramajogi

回答

2

您試圖訪問使用AVM類路徑的DM庫項目。如果你不明白兩者之間的差異,那麼我會建議做一些背景閱讀,如專業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注入豆。如果可以,儘量避免使用serviceRegistry

+0

謝謝你阿布森。 – Ramajogi