Show Menu
トピック×

Sling アダプターの使用

例えば、次のように実行するだけで、Resource オブジェクトを対応する Node オブジェクトに変換できます。
Node node = resource.adaptTo(Node.class);

ユースケース

次のようなユースケースがあります。
  • 実装固有のオブジェクトを取得します。
    For example, a JCR-based implementation of the generic Resource interface provides access to the underlying JCR Node .`
  • 内部的なコンテキストオブジェクトを渡す必要があるオブジェクトのショートカット作成。
    例えば、JCR ベースの ResourceResolver では、要求の JCR Session への参照を保持しています。この JCR Session は、その要求セッションに基づいて動作する多くのオブジェクト( PageManager UserManager など)を取得するために必要になります。
  • サービスへのショートカット。
    A rare case - sling.getService() is simple as well.

戻り値 Null

adaptTo() はnullを返すことができる。
これには様々な理由がありますが、その一部は次のとおりです。
  • 実装がターゲットタイプをサポートしていない
  • このケースを処理するアダプターファクトリがアクティブでない(サービスの参照が見つからないなどの理由で)
  • 内部的な条件が合わなかった
  • サービスを利用できない
null のケースを問題なく処理することが重要です。JSP レンダリングでは、JSP の問題によってコンテンツの一部が空になる場合に、その問題が受容されることもあります。

キャッシュ

To improve performance, implementations are free to cache the object returned from a obj.adaptTo() call. obj が同じであれば、返されるオブジェクトも同じです。
このキャッシュ処理は、すべての AdapterFactory ベースのケースで実行されます。
ただし、汎用的なルールは存在せず、オブジェクトが新しいインスタンスである場合も既存のインスタンスである場合もあります。したがって、いずれの動作にも依存することはできません。重要なのは、特に AdapterFactory 内部において、このシナリオでオブジェクトが再利用可能であるということです。

仕組み

There are various ways that Adaptable.adaptTo() can be implemented:
  • オブジェクト自体による実装(このメソッド自体を実装して特定のオブジェクトにマッピングします)。
  • を使用して、 [ AdapterFactory`](https://sling.apache.org/apidocs/sling5/org/apache/sling/api/adapter/AdapterFactory.html)任意のオブジェクトをマッピングできます。
    オブジェクトは、インターフェイスを実装し Adaptable 、拡張する必要があります(こ SlingAdaptable の拡張は、中央アダプ adaptTo タマネージャに呼び出しを渡します)。
    これにより、などの既存のク adaptTo ラスのメカニズムにフックできま Resource す。
  • これら 2 つの組み合わせ。
最初の例では、javadocに何が可能かを示すこ adaptTo-targets とができます。 ただし、JCRベースのリソースなどの特定のサブクラスでは、多くの場合、これは不可能です。 後者の場合、の実装は通常、バ AdapterFactory ンドルのプライベートクラスの一部であり、クライアントAPIに公開されず、javadocにも表示されません。 理論的には、 AdapterFactory OSGi の設定 OSGiサービスランタイムからすべての実装にアクセスし、「アダプティブテーブル」(ソースとターゲット)設定を調べることは可能ですが、相互にマッピングすることはできません。 最終的には、これは内部ロジックに依存し、ドキュメント化する必要があります。 したがって、この資料を参照してください。

リファレンス

Sling

**Resource ** は次の項目に適応します。
Node ノードを参照するJCRノードベースのリソースまたはJCRプロパティの場合。
プロパティ このリソースが JCR プロパティベースのリソースである場合。
項目 このリソースが JCR ベースのリソース(ノードまたはプロパティ)の場合。
マップ このリソースが JCR ノードベースのリソース(または値マップをサポートするその他のリソース)の場合、プロパティのマップを返します。
ValueMap JCRノードベースのリソース(または他のリソースサポート値マップ)の場合、プロパティの使いやすいマップを返します。 また、(ヌル文字の場合を処理するなど ) ResourceUtil.getValueMap(Resource) を使用して達成することもできます。
InheritanceValueMap Extension of ValueMap which allows the hierarchy of resources to be taken into account when looking for properties.
PersistableValueMap このリソースが JCR ノードベースのリソースであり、ユーザーがそのノードのプロパティを変更する権限を持っている場合。 注意:複数の永続化可能マップでは値は共有されません。
InputStream 「ファイル」のバイナリコンテンツを返す nt:resource
AuthorizableResourceProvider org.apache.sling.jackrabbit.usermanager /system/userManager
cq:Page cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig
ResourceResolverは​ 、次に対応します。
Session このリソースリゾルバーが JCR ベースのリソースリゾルバー(デフォルト)である場合の、要求の JCR セッション。
PageManager
ComponentManager
デザイナー
AssetManager このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合の、JCR セッションに基づいたもの。
TagManager このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合の、JCR セッションに基づいたもの。
UserManager このリソースリゾルバーが JCR ベースのリソースリゾルバーであり、ユーザーが UserManager へのアクセス権限を持っている場合の、JCR セッションに基づいたもの。
Authorizable 現在のユーザー。
ユーザー 現在のユーザー。
PrivilegeManager
環境設定 現在のユーザーの環境設定(このリソースリゾルバーが JCR ベースのリソースリゾルバーである場合、JCR セッションに基づいたもの)。
PreferencesService
PinManager
QueryBuilder
Externalizer 要求オブジェクトがない場合でも、絶対 URL を外部化するためのもの。
**SlingHttpServletRequest ** は次の項目に適応します。
現時点ではターゲットはありませんが、Adaptable を実装し、カスタムの AdapterFactory 内でソースとして使用することは可能です。
**SlingHttpServletResponse ** は次の項目に適応します。
ContentHandler (XML) この応答が Sling リライター応答である場合。

WCM

**Page ** は次の項目に適応します。
Resource ページのリソース。
LabeledResource ラベル付きリソース(== this)。
Node ページのノード。
... ページのリソースが適応可能なすべての項目。
**Component ** は次の項目に適応します。
コンポーネントのリソース。
ラベル付きリソース(== this)。
コンポーネントのノード。
...
コンポーネントのリソースが適応可能なすべての項目。
**Template ** は次の項目に適応します。
Resource Node.htmlテンプレートのリソース。
LabeledResource ラベル付きリソース(== this)。
Node このテンプレートのノード。
... テンプレートのリソースが適応可能なすべての項目。

セキュリティ

**Authorizable ** User および **Group ** は以下に適応します。
ユーザーまたはグループのホームノードを返します。
ユーザーまたはホームノードのレプリケーションステータスを返します。

DAM

アセットのリソース。
アセットのノード。
...
アセットのリソースが適応可能なすべての項目。

タグ付け

タグのリソース。
タグのノード。
...
タグのリソースが適応可能なすべての項目。

その他

さらに、Sling、JCR、OCM では、カスタム OCM( [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) Object Content Mapping)オブジェクト用の object-content-mapping.html も提供しています。