AEM as a Cloud Service パブリッシャーで TagManager.resolve が null を返す
AEM as a Cloud Service パブリッシャー環境では、TagManager.resolve への呼び出しが null を返しますが、AEM 6.5 またはオーサー環境では同じロジックが正しく機能します。 システムのデフォルトは、標準の AEMaaCS パス /etc/tags ではなく、タグの解決に対して /content/cq:tags です。 この問題を修正するには、OSGi 設定を更新して従来のサポートを無効にし、オーサー環境とパブリッシャー環境の両方から /etc/tags ノードを削除します。
説明 description
環境
Adobe Experience Manager(AEM)as a Cloud Service - Sites
問題/症状
-
サーブレットコードは以下を使用します。
code language-none TagManager tagManager = request.getResourceResolver().adaptTo(TagManager.class); Tag tag = tagManager.resolve("/content/cq:tags/...");TagManager が、オーサーではなく、パブリッシャーでのみ null として解決されます。
-
ログファイルに次が表示されます。
com.day.cq.tagging.impl.JcrTagManagerFactoryImpl Using /etc/tags as root path for tagsこれは、システムがデフォルトで
/etc/tagsに設定されていることを示します。 -
タグはパブリッシャーでは
/etc/tagsの下に存在しますが、オーサーでは/content/cq:tagsが適切に設定されています。
根本原因
パブリッシャーの /etc/tags の下にタグが存在する場合、AEMのデフォルトが従来の /etc/tags パスになります。
解決策 resolution
この問題を解決するには:
-
サービス
legacySupport.enabled.name(com.day.cq.tagging.impl.JcrTagManagerFactoryImplDay CQ Tagging Service )の OSGi 設定プロパティ を false に設定します。 これにより、AEMは/content/cq:tagsをルートパスとして使用します。 -
オーサー環境とパブリッシャー環境の両方で
/etc/tagsノードが見つからないか、空であることを確認します。 -
パブリッシャーをクリーンアップするには:
/etc/tagsを含み、子ノードを含まない空のコンテンツパッケージを作成します。- オーサーにパッケージをインストールし、パブリッシュにレプリケートします。 これにより、
/etc/tagsが両方の環境から削除されます。
-
または、オーサー配布 UI から
/etc/tags削除 アクションリクエストを送信して、パブリッシャーから直接 ノードを削除します。
その結果、次のようになります。
- AEM ログに表示される内容:
com.day.cq.tagging.impl.JcrTagManagerFactoryImpl Using /content/cq:tags as root path for tags TagManager.resolveは/content/cq:tagsでタグを正しく使用します。