Show Menu
THEMEN×

Verwenden von Sling-Adaptern

Mit Sling wird ein Adaptermuster zum bequemen Übersetzen von Objekten bereitgestellt, die zum Implementieren der Adaptable -Schnittstelle verwendet werden. This interface provides a generic adaptTo() method that will translate the object to the class type being passed as the argument.
Sie können beispielsweise einfach wie folgt vorgehen, um ein Ressourcenobjekt in das entsprechende Node-Objekt zu übersetzen:
Node node = resource.adaptTo(Node.class);

Nutzungsszenarien

Es gibt die folgenden Nutzungsszenarien:
  • Rufen Sie spezifische Objekte für die Implementierung ab.
    Eine JCR-basierte Implementierung der generischen Resource -Schnittstelle ermöglicht beispielsweise Zugriff auf das zugrunde liegende JCR- Node -Element.
  • Erstellung von direkten Verknüpfungen für Objekte, für die interne Kontextobjekte übergeben werden müssen.
    For example, the JCR-based ResourceResolver holds a reference to the request's JCR Session , which in turn is needed for many objects that will work based on that request session, such as the PageManager or UserManager .
  • Direkte Verknüpfung mit Diensten.
    A rare case - sling.getService() is simple as well.

NULL-Rückgabewert

adaptTo() kann null zurückgeben.
Hierfür gibt es verschiedene Gründe, z. B.:
  • Die Implementierung unterstützt den Zieltyp nicht.
  • Eine Adapter-Factory zur Verarbeitung dieses Falls ist nicht aktiv (z. B. aufgrund von fehlenden Dienstverweisen)
  • Fehler für interne Bedingung
  • Dienst ist nicht verfügbar
Es ist wichtig, dass Sie den NULL-Fall ordnungsgemäß verarbeiten. Für das JSP-Rendering kann es zulässig sein, dass für JSP ein Fehler auftritt, wenn dies zu einem leeren Inhaltselement führt.

Caching

To improve performance, implementations are free to cache the object returned from a obj.adaptTo() call. Wenn das obj -Element gleich ist, ist auch das zurückgegebene Objekt dasselbe.
Diese Zwischenspeicherung wird für alle auf AdapterFactory basierenden Fälle durchgeführt.
Es gibt aber keine allgemeine Regel. Bei dem Objekt kann es sich entweder um eine neue oder eine vorhandene Instanz handeln. Dies bedeutet, dass Sie sich nicht auf eines der Verhalten verlassen können. Es ist – vor allem innerhalb von AdapterFactory – also wichtig, dass Objekte bei diesem Szenario wiederverwendet werden können.

Funktionsweise

There are various ways that Adaptable.adaptTo() can be implemented:
  • Über das Objekt selbst. Die eigentliche Methode wird implementiert und dann erfolgt die Zuordnung zu bestimmten Objekten.
  • Über ein AdapterFactory -Element, mit dem zufällige Objekte zugeordnet werden können.
    Die Objekte müssen trotzdem noch die Adaptable -Schnittstelle implementieren und SlingAdaptable (übergibt den adaptTo -Aufruf an einen zentralen Adapter-Manager) erweitern.
    Dies ermöglicht die Verwendung von Hooks für den adaptTo -Mechanismus für vorhandene Klassen, z. B. Resource .
  • Eine Kombination beider Vorgehensweisen.
Im ersten Fall kann über javadocs angegeben werden, welche adaptTo-targets möglich sind. Für bestimmte Unterklassen, z. B. die JCR-basierte Resource-Klasse, ist dies häufig nicht möglich. Da Implementierungen von AdapterFactory im letzteren Fall normalerweise Teil der privaten Klassen eines Bundles sind, werden sie nicht per Client-API verfügbar gemacht und auch nicht in javadocs aufgeführt. Theoretisch wäre es möglich, auf alle AdapterFactory -Implementierungen über die OSGi -Dienstlaufzeit zuzugreifen und sich die Konfigurationen der „adaptierbaren Elemente“ (Quellen und Ziele) anzusehen, diese aber nicht einander zuzuordnen. Dies hängt letztendlich von der internen Logik ab, die dokumentiert werden muss. Dies ist der Grund für diesen Verweis.

Verweis

Sling

Adaptierung von Resource für:
Knoten Wenn es sich hierbei um eine JCR-Node-basierte Ressource oder eine JCR-Eigenschaft handelt, die auf einen Knoten verweist.
Eigenschaft Wenn dies eine auf einer JCR-Eigenschaft basierende Ressource ist.
Item Wenn dies eine JCR-basierte Ressource ist (Knoten oder Eigenschaft).
Map Gibt eine Zuordnung der Eigenschaften zurück, wenn dies eine auf einem JCR-Knoten basierende Ressource ist (oder eine andere Ressource, die Wertzuordnungen unterstützt).
ValueMap Gibt eine benutzerfreundliche Zuordnung der Eigenschaften zurück, wenn dies eine auf einem JCR-Knoten basierende Ressource ist (oder eine andere Ressource, die Wertzuordnungen unterstützt). Can also be achieved (more simply) by using ResourceUtil.getValueMap(Resource) (handles null case, etc.).
InheritanceValueMap Extension of ValueMap which allows the hierarchy of resources to be taken into account when looking for properties.
ModizableValueMap Eine Erweiterung der ValueMap , mit der Sie Eigenschaften auf diesem Knoten ändern können.
InputStream Returns the binary content of a file resource (if this is a JCR-node-based resource and the node type is nt:file or nt:resource ; if this is a bundle resource; file content if this is a file system resource) or the data of a binary JCR property resource.
URL Gibt eine URL für die Ressource zurück (Repository-URL dieses Knotens, wenn es eine auf einem JCR-Knoten basierende Ressource ist, eine jar-Bundle-URL, wenn es eine Bundle-Ressource ist, oder eine file-URL, wenn es eine Dateisystemressource ist).
Datei Wenn es eine Dateisystemressource ist.
SlingScript Wenn diese Ressource ein Skript ist (z. B. eine JSP-Datei), für das ein Skriptmodul bei Sling registriert ist.
Servlet Wenn diese Ressource ein Skript ist (z. B. eine JSP-Datei), für das ein Skriptmodul bei Sling registriert ist, oder wenn es eine Servlet-Ressource ist.
String Boolean Long Double Calendar Value String[] Boolean[] Long[] Calendar[] Value[] Gibt den bzw. die Werte zurück, wenn es eine auf einer JCR-Eigenschaft basierende Ressource ist (und der Wert passt).
LabeledResource Wenn es eine auf einem JCR-Knoten basierende Ressource ist.
Asset- Wenn es eine dam:Asset-Knotenressource ist.
Rendition Wenn dies eine dam:Asset-Darstellung ist (nt:file im Ausgabeordner eines dam:Assert)
UserManager Basiert auf der JCR-Sitzung, wenn es eine JCR-basierte Ressource ist und der Benutzer über Berechtigungen zum Zugreifen auf den UserManager verfügt.
Autorisierter Die Authorizable-Funktion ist die allgemeine Basisschnittstelle für Benutzer und Gruppe.
User Benutzer ist ein spezieller Autorisierbarer Benutzer, der authentifiziert und imitiert werden kann.
SimpleSearch Sucht unter der Ressource (oder es wird setSearchIn() genutzt), wenn es eine JCR-basierte Ressource ist.
WorkflowStatus Workflowstatus für den jeweiligen Seiten-/Workflow-Nutzlast-Knoten.
ReplicationStatus Replikationsstatus für die jeweilige Ressource oder dem zugehörigen Unterknoten „jcr:content“ (wird zuerst geprüft).
ConnectorResource Gibt eine angepasste Connector-Ressource für bestimmte Typen zurück, wenn es eine auf einem JCR-Knoten basierende Ressource ist.
Config If this is a cq:ContentSyncConfig node resource.
ConfigEntry If this is below a cq:ContentSyncConfig node resource.
ResourceResolver passt sich an:
Sitzung Die JCR-Sitzung der Anforderung, wenn es sich um einen JCR-basierten Ressourcenauflöser handelt (Standard).
AssetManager Basierend auf der JCR-Sitzung, wenn es sich um einen JCR-basierten Ressourcenauflöser handelt.
UserManager Der UserManager bietet Zugriff auf autorisierbare Objekte, d. h. Benutzer und Gruppen, und ermöglicht deren Pflege. Der UserManager ist an eine bestimmte Sitzung gebunden.
Autorisierter Der aktuelle Benutzer.
User Der aktuelle Benutzer.
QueryBuilder
Externalizer Für das Externalisieren von absoluten URLs, auch ohne das Anforderungsobjekt.
Adaptierung von SlingHttpServletRequest für:
Es sind noch keine Ziele vorhanden, aber „Adaptable“ wird implementiert und kann als Quelle in einer benutzerdefinierten „AdapterFactory“ verwendet werden.
Adaptierung von SlingHttpServletResponse für:
ContentHandler (XML) Wenn dies eine Sling Rewriter-Antwort ist.

WCM

Adaptierung von Page für:
Ressource Ressource der Seite.
LabeledResource Bezeichnete Ressource (== this).
Knoten Knoten der Seite.
... Alles, woran die Ressource der Seite angepasst werden kann.
Adaptierung von Component für:
Ressource der Komponente.
Bezeichnete Ressource (== this).
Knoten der Komponente.
...
Alles, woran die Ressource der Komponente angepasst werden kann.
Adaptierung von Template für:
Ressource Node.htmlRessource der Vorlage.
LabeledResource Bezeichnete Ressource (== this).
Knoten Knoten dieser Vorlage.
... Alles, an das die Vorlagenressource angepasst werden kann.

Sicherheit

Adaptierung von Authorizable , User und Group für:
Gibt den Stammknoten des Benutzers/der Gruppe zurück.
Gibt den Replizierungsstatus für den Stammknoten des Benutzers/der Gruppe zurück.

DAM

Asset passt sich an:
Ressource des Assets.
Knoten des Assets.
...
Alles, woran die Ressource des Assets angepasst werden kann.

Tagging

Tag passt sich an:
Ressource des Tags.
Knoten des Tags.
...
Alles, woran die Ressource des Tags angepasst werden kann.

Andere

Über Sling/JCR/OCM wird außerdem eine [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) für benutzerdefinierte OCM-Objekte ( Object Content Mapping ) bereitgestellt.