python - 将 json 发布到露天网站 api 时出现错误 500

标签 python alfresco

我正在尝试 POST 到站点 api 来创建站点(显然:-)) 我发布以下内容:

payload={'description':'My description', 'visibility':'PUBLIC', 
'site-preset':'site-dashboard','title':'My Site name', "shortName":'my-site-name'}

如:

requests.post('http://<myserver>:8080/alfresco/service/api/sites',
auth=('admin','XXXXX'), data=json.dumps(payload))

在Python中。我收到了 500 错误,详细信息如下。我还需要在请求中添加什么才能使其正常工作?我找不到比 http://docs.alfresco.com/3.4/references/RESTful-SiteSitesPost.html 更进一步定义标题的文档我一直在使用这个例子:https://forums.alfresco.com/forum/developer-discussions/alfresco-api/create-site-alfresco-using-open-cmis-extension-07312013然而定义远不止于此。

下面清楚地表明 site.shortName 未定义,因此我应该如何在传递给站点 api 的 json 中定义 ShortName 以便 alfresco 站点 api 拾取它?也非常欢迎引用文档。

错误日志如下:

{u'callstack': [u'',
u'freemarker.core.InvalidReferenceException: Expression site.shortName is undefined on line 9, column 56 in org/alfresco/repository/site/site.lib.ftl.',
u'freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)',
u'freemarker.core.Expression.getStringValue(Expression.java:118)',
u'freemarker.core.AddConcatExpression._getAsTemplateModel(AddConcatExpression.java:98)',
u'freemarker.core.Expression.getAsTemplateModel(Expression.java:89)',
u'freemarker.core.ListLiteral.getModelList(ListLiteral.java:119)',
u'freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:91)',
u'freemarker.core.Expression.getAsTemplateModel(Expression.java:89)',
u'freemarker.core.Expression.getStringValue(Expression.java:93)',
u'freemarker.core.DollarVariable.accept(DollarVariable.java:76)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.MixedContent.accept(MixedContent.java:92)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.EscapeBlock.accept(EscapeBlock.java:84)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.MixedContent.accept(MixedContent.java:92)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.Macro$Context.runMacro(Macro.java:172)',
u'freemarker.core.Environment.visit(Environment.java:614)',
u'freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.Macro$Context.runMacro(Macro.java:172)',
u'freemarker.core.Environment.visit(Environment.java:614)',
u'freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.MixedContent.accept(MixedContent.java:92)',
u'freemarker.core.Environment.visit(Environment.java:221)',
u'freemarker.core.Environment.process(Environment.java:199)',
u'org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:218)',
u'org.springframework.extensions.webscripts.AbstractWebScript.renderTemplate(AbstractWebScript.java:896)',
u'org.springframework.extensions.webscripts.DeclarativeWebScript.renderFormatTemplate(DeclarativeWebScript.java:267)',
u'org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:147)',
u'org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:429)',
u'org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:452)',
u'org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:491)',
u'org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:529)',
u'org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:341)',
u'org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)',
u'org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)',
u'org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)',
u'javax.servlet.http.HttpServlet.service(HttpServlet.java:727)',
u'org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)',
u'org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)',
u'org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)',
u'org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)',
u'org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)',
u'org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)',
u'org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)',
u'org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)',
u'org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)',
u'org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)',
u'org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)',
u'org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)',
u'org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)',
u'org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)',
u'org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)',
u'org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)',
u'org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)',
u'org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)',
u'org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)',
u'java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)',
u'java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)',
u'java.lang.Thread.run(Thread.java:724)',
u"org.alfresco.service.cmr.repository.TemplateException: 06020108 Error during processing of the template 'Expression site.shortName is undefined on line 9, column 56 in org/alfresco/repository/site/site.lib.ftl.'. Please contact your system administrator.",
u'org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:222)',
u"org.springframework.extensions.webscripts.WebScriptException: 06020018 Wrapped Exception (with status template): 06020108 Error during processing of the template 'Expression site.shortName is undefined on line 9, column 56 in org/alfresco/repository/site/site.lib.ftl.'. Please contact your system administrator.",
u'org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1067)'],
u'exception': u"org.springframework.extensions.webscripts.WebScriptException - 06020018 Wrapped Exception (with status template): 06020108 Error during processing of the template 'Expression site.shortName is undefined on line 9, column 56 in org/alfresco/repository/site/site.lib.ftl.'. Please contact your system administrator.",
u'message': u"06020018 Wrapped Exception (with status template): 06020108 Error during processing of the template 'Expression site.shortName is undefined on line 9, column 56 in org/alfresco/repository/site/site.lib.ftl.'. Please contact your system administrator.",
u'server': u'Community v4.2.0 (r63893-b12) schema 6,033',
u'status': {u'code': 500,
u'description': u'An error inside the HTTP server which prevented it from fulfilling the request.',
u'name': u'Internal Error'},
u'time': u'02-Jul-2014 15:15:01'}

更新: 我从那时起(部分感谢杰夫的回答)通过在存储库中创建一个网站,然后使用enable-site.get.js(谷歌它)来完成该过程,以编程方式创建了一个可用的网站。嘿,快点,一个可用的网站!关键是是在 javascript 层中调用 siteData.newPreset("site-dashboard", ) (如果我看到的是症状而不是实际的解决方案,请有人纠正我)以在 AVM 存储中实际生成所需的 xml,以便该站点可用。create-site 应该可以做到这一点;但是我还没有让它工作,因此需要两步过程。许多人似乎已经让 create-site 工作得很好。

创建站点需要 OAuth 身份验证。我发布的错误是由于没有传递正确格式的json导致的;我使用curl(按照Jeff Potts 的建议)和Postman(Chromium 应用程序)进行了重复测试。我现在是一只快乐的兔子(虽然我仍然不明白为什么 create-site 什么也没做,但无论如何;我有一个解决方案)

最佳答案

首先,请注意,成功调用此方法不会导致 Alfresco Share 中的站点正常运行。这一事实记录在 site.post Web 脚本文档中,可以在此处找到:

http://localhost:8080/alfresco/s/script/org/alfresco/repository/site/sites.post

如果您不打算创建功能性的 Alfresco Share 站点,但仍想在存储库层上创建站点文件夹结构(这就是此 Web 脚本的作用),那么您需要提供的有效负载应如下所示:

{"title":"Test Site 1","visibility":"PUBLIC","description":"","sitePreset":"site-dashboard","shortName":"test-site-1"}

请注意,它使用的是“sitePreset”,而不是您最初使用的“site-preset”。

当我使用以下curl 语句对本地 4.2.f 服务器调用此函数时,我得到了成功的响应:

curl -uadmin:admin -X POST "http://localhost:8080/alfresco/service/api/sites" -H "content-type: application/json" -d@/var/tmp/site.json

至少从 4.2.f 开始,不支持以编程方式创建共享网站的方法。

关于python - 将 json 发布到露天网站 api 时出现错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24552734/

相关文章:

python - GeoDjango 段错误

api - 可以创建自定义界面,利用由 Alfresco 管理的文件吗?

java - 如何使用 CMIS 在 Alfresco 中进行批量更新

python - 我如何获得 Pandas 中一行的相等或最接近的值?

java - 使用 JCR 与 J2EE 客户端服务器环境中的各种内容存储库进行交互的标准接口(interface)

alfresco - 如何在Alfresco中编写文件上传网页脚本

share - 自定义 Surf Platform 根范围 API

python - "variable or 0"在 python 中是什么意思?

python - Pymunk Pygame 对象位置不更新

python - 如何执行多个系列的按元素求和,保留 NaN