由于Sling请求限制,内容片段模型无法保存或加载
当Sling请求处理限制设置得太低时,内容片段模型无法保存、无法显示所有字段或还原更改。 通常涉及两个设置:sling.max.calls和request.max.file.count,前者控制编辑器进行多少后端调用,后者控制多部分保存请求。 升级会重置这些限制或自定义OSGi配置覆盖它们,这将触发错误,如 TooManyCallsException 和FileCountLimitExceededExcepted。 要解决此问题,请提高受影响的Sling限制,删除冲突的配置覆盖,并确认编辑器加载并正确保存。
描述 description
环境
- Adobe Experience Manager as a Cloud Service
- AEM Managed Services
- AEM 6.5内部部署
问题/症状
- 错误日志显示
TooManyCallsException。 - 错误日志显示
FileCountLimitExceededException: attachment。 - 内容片段模型字段未保存。
- 重新打开模型后,新字段消失。
- 当模型包含多个字段时,编辑器不显示所有选项卡或字段。
- 带有嵌套多列表的对话框中缺少 添加 按钮。
原因
AEM使用Sling请求处理限制来防止过度执行请求和过度提交多部分表单。 如果sling.max.calls太低,则在加载或保存复杂模型时,内容片段模型编辑器超出允许的后端调用数,这会导致TooManyCallsException。 如果request.max.file.count过低,则即使未上载任何文件,多部分保存请求也会失败,并出现FileCountLimitExceededException。 升级或自定义OSGi配置会重置或覆盖这些值,并导致问题返回。
解决方法 resolution
要解决Sling请求限制导致的内容片段模型保存或加载失败的问题,请执行以下步骤:
-
通过查看
error.log识别发生的错误。 -
如果日志显示
TooManyCallsException,请增加Apache Sling主Servlet中的sling.max.calls。- 对于AEM 6.5内部部署或AEM Managed Services,请打开
/system/console/configMgr,找到Apache Sling Main Servlet,然后递增到更高的值,如2000或3000,并逐步增加Number of Calls per Request。 - 对于AEM as a Cloud Service,请更新
ui.config项目中的org.apache.sling.engine.impl.SlingMainServlet.cfg.json,并将sling.max.calls设置为更高的值,如2000或3000。
- 对于AEM 6.5内部部署或AEM Managed Services,请打开
-
如果日志显示
FileCountLimitExceededException: attachment,请在Apache Sling请求参数处理中增加request.max.file.count。- 对于本地AEM 6.5或AEM Managed Services,请打开
/system/console/configMgr,找到Apache Sling Request Parameter Handling,并将Maximum File Count设置为10000。 - 对于AEM as a Cloud Service,请更新
ui.config项目中的org.apache.sling.engine.parameters.cfg.json并将request.max.file.count设置为10000。
- 对于本地AEM 6.5或AEM Managed Services,请打开
-
检查是否存在覆盖这些值的冲突自定义OSGi配置,并删除或更正它们。
-
在需要您的部署类型时重新启动AEM,以应用更新的值。
-
通过添加字段、保存和重新打开模型来再次测试模型。
-
确认所有字段都保持不变,
error.log中不会出现任何新错误。