已通过AccessDeniedException阻止分发队列
当尝试使用快速Publish、管理发布或复制来复制页面内容、XF或其他资源时,创作实例上的分发队列会被阻止。 您可以通过检查分发UI (AEM > Tools > Deployment > Distribution)中的 发布 分发队列来进行验证。 按照本文档中提供的步骤解决问题。
描述 description
环境
- Experience Manager
- Experience Manager即云服务
问题/症状
当尝试使用“快速Publish”、“管理发布”或“复制”复制某些页面内容(或XF和其他类型的资源)时,创作上的分发队列将被 阻止。
通过检查分发UI (AEM - Tools - Deployment - Distribution)中的 发布 分发队列可以观察到这种情况:
选择Golden Publisher队列(从列表中以粗体显示条目),提供更多详细信息,特别是涉及的 PATH(此处可包含多个元素):
查看 日志 选项卡将显示以下相应错误:
2023/03/08 12:11:26:238 - INFO — 使用分发包PackageMessage(pubSlingId=a1133c97-680 9-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c577-4079-8741-d41660597d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service,paths=[ /content/wknd/fr] , deepPaths=[ ] ),偏移量=158705
2023/03/08 12:11:27:459 - WARN — 消息:尝试导入分发包PackageMessage(pubSlingId=a1133c97-6809-411e-a435-4eea0ecbe889, reqType=ADD, pkgId=dstrpck-1678277486031-63159f4b-c57 7-4079-8741-d41660597158705 d20, pkgType=journal_filevault, pkgLength=6330, pubAgentName=publish, userId=replication-service, paths=[ /content/wknd/fr] , deepPaths=[ ] ),由于“javax.jcr.AccessDeniedException: OakAccess0000000000: Access拒绝”,导入程序将稍后重试
Stacktrace: org.apache.sling.distribution.common.DistributionException: javax.jcr.AccessDeniedException: OakAccess0000:访问被拒绝[ …]
您需要 清除队列(或移除该项)以取消阻止该队列。
解决方法 resolution
尽管错误为 javax.jcr.AccessDeniedException,但是与分发服务用户的ACL/权限可能没有关系,但如果以下情况不适用于您的情况,则应考虑这一点。
诊断
在某些情况下,当复制的内容确实具有与特殊 jcr:lockIsDeep 属性相关的特定配置时,可能会出现上述错误。
为了确认诊断,您必须使用以下任何可以访问/适用的工具检查 每个提及的路径:
- 适用于开发实例的CRX/DE
- 存储库浏览器
- 在包管理器中创建内容包(此选项也是解决方案的一部分)
然后,您需要检查在分发队列UI中找到的每个路径的 jcr:content 节点,并验证是否:
- 它 具有
jcr:lockIsDeep="(Boolean)true" 属性 - 它 不 具有
jcr:lockOwner="xxx"属性 - ( it 在
jcr:mixinTypes中不 具有mix:lockable值)
如果是这种情况,则问题已确认,因为 jcr:lockIsDeep 属性不应单独存在。 当 锁定 页面时,此属性应始终与 jcr:lockOwner 一起设置。
仅设置 jcr:lockIsDeep 属性是不可能的,即使使用JCR API也是如此,因此导致此情况的根本原因主要是安装了包含该单个属性的 损坏的 内容包。
分辨率
要修复内容,唯一的解决方案是在作者中安装包,该包在相应节点上设置了正确的属性。
您可以从具有相应内容的另一个实例创建包,或者,如果受影响的实例上只有此内容,则可以按照以下说明进行操作:
- 在损坏的实例上为错误页面生成包
- 下载包
- 提取page/jcr:content的
.content.xml - 手动删除具有 jcr:lockIsDeep 的行
- 使用新的/修复的.content.xml更新包
- 重新上传并安装修改后的包
再次检查页面属性,并成功测试复制/分发。