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

この問題を解決するには:

  1. サービス legacySupport.enabled.namecom.day.cq.tagging.impl.JcrTagManagerFactoryImplDay CQ Tagging Service )の OSGi 設定プロパティ を false に設定します。 これにより、AEMは /content/cq:tags をルートパスとして使用します。

  2. オーサー環境とパブリッシャー環境の両方で /etc/tags ノードが見つからないか、空であることを確認します。

  3. パブリッシャーをクリーンアップするには:

    1. /etc/tags を含み、子ノードを含まない空のコンテンツパッケージを作成します。
    2. オーサーにパッケージをインストールし、パブリッシュにレプリケートします。 これにより、/etc/tags が両方の環境から削除されます。
  4. または、オーサー配布 UI から /etc/tags 削除 アクションリクエストを送信して、パブリッシャーから直接 ノードを削除します。

その結果、次のようになります。

  • AEM ログに表示される内容:com.day.cq.tagging.impl.JcrTagManagerFactoryImpl Using /content/cq:tags as root path for tags
  • TagManager.resolve/content/cq:tags でタグを正しく使用します。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f