Använda delningsadaptrar using-sling-adapters

Sling erbjuder ett adaptermönster för att enkelt översätta objekt som implementerar gränssnittet Adaptable. Det här gränssnittet tillhandahåller en generisk customiTo()-metod som översätter objektet till den klasstyp som skickas som argument.

Om du till exempel vill översätta ett Resource-objekt till motsvarande Node-objekt kan du bara göra följande:

Node node = resource.adaptTo(Node.class);

Användningsexempel use-cases

Det finns följande användningsområden:

  • Få implementeringsspecifika objekt.

    En JCR-baserad implementering av det generiska Resource-gränssnittet ger till exempel åtkomst till den underliggande JCR Node.

  • Skapa genvägar för objekt som kräver att interna kontextobjekt skickas.

    Den JCR-baserade ResourceResolver innehåller till exempel en referens till begärans JCR Session som i sin tur behövs för många objekt som ska fungera baserat på den begärandesessionen, till exempel PageManager eller UserManager.

  • Genväg till tjänster.

    Ett sällsynt fall - sling.getService() är också enkelt.

Null-returvärde null-return-value

adaptTo() returnerar null.

Det finns olika orsaker till detta, bland annat:

  • implementeringen saknar stöd för måltypen
  • en adapterfabrik som hanterar det här ärendet är inte aktivt (till exempel på grund av att det saknas tjänstreferenser)
  • internt villkor misslyckades
  • tjänsten är inte tillgänglig

Det är viktigt att du hanterar skiftläget null på ett smidigt sätt. Vid jsp-återgivning kan det vara acceptabelt att jsp misslyckas om det resulterar i en tom del av innehållet.

Cachning caching

För att förbättra prestanda kan implementeringar cachelagra objektet som returneras från ett obj.adaptTo()-anrop. Om obj är samma är det returnerade objektet detsamma.

Den här cachningen utförs för alla AdapterFactory-baserade fall.

Det finns dock ingen allmän regel - objektet kan vara antingen en ny eller en befintlig instans. Det innebär att du inte kan förlita dig på något av beteendena. Därför är det viktigt, särskilt i AdapterFactory, att objekt kan återanvändas i det här scenariot.

Så här fungerar det how-it-works

Det finns olika sätt att implementera Adaptable.adaptTo():

  • Efter själva objektet, implementera själva metoden och mappa till vissa objekt.

  • Med en AdapterFactory, som kan mappa godtyckliga objekt.

    Objekten måste fortfarande implementera gränssnittet Adaptable och måste utöka SlingAdaptable (vilket skickar anropet adaptTo till en central adapterhanterare).

    Detta tillåter kopplingar till adaptTo-mekanismen för befintliga klasser, till exempel Resource.

  • En kombination av båda.

I det första fallet kan Java™-dokumenten ange vad adaptTo-targets är möjligt. Detta är dock ofta inte möjligt för vissa underklasser, t.ex. JCR-baserade resurser. I det senare fallet är implementeringar av AdapterFactory vanligtvis en del av de privata klasserna i ett paket och exponeras därför inte i ett klient-API och inte heller listas i Java™-dokument. Teoretiskt sett skulle det vara möjligt att komma åt alla AdapterFactory-implementeringar från OSGi-tjänstmiljön och titta på deras"adaptable" (sources and target)-konfigurationer, men inte att mappa dem till varandra. I slutändan beror detta på den interna logiken, som måste dokumenteras. Därför refererar vi till detta.

Referens reference

Sling sling

Resursen anpassas till:

Nod
Om detta är en JCR-nodbaserad resurs eller en JCR-egenskap som refererar till en nod.
Egenskap
Om detta är en JCR-egenskapsbaserad resurs
Objekt
Om detta är en JCR-baserad resurs (nod eller egenskap)
Karta
Returnerar en karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller andra resurser som stöder värdekartor)
ValueMap
Returnerar en användbar karta över egenskaperna, om detta är en JCR-nodbaserad resurs (eller annan resurs som stöder värdekartor). Kan också uppnås (enklare) med
ResourceUtil.getValueMap(Resource) (hanterar null-skiftläge osv.)
ArvValueMap
Utökning av ValueMap som tillåter att hierarkin med resurser beaktas vid sökning efter egenskaper
ModiitableValueMap
Ett tillägg till ValueMap som gör att du kan ändra egenskaper på den noden
InputStream
Returnerar det binära innehållet för en filresurs (om detta är en JCR-nodbaserad resurs och nodtypen är nt:file eller nt:resource; om detta är en paketresurs; filinnehåll om detta är en filsystemresurs) eller data för en binär JCR-egenskapsresurs
URL
Returnerar en URL till resursen (databas-URL för den här noden om det är en JCR-nodbaserad resurs; jar bundle-URL om det är en paketresurs; fil-URL om det är en filsystemresurs)
Fil
Om detta är en filsystemresurs
SlingScript
Om den här resursen är ett skript (till exempel jsp-fil) som en skriptmotor är registrerad med sling
Servlet
Om den här resursen är ett skript (t.ex. jsp-fil) som en skriptmotor har registrerats med sling eller om det här är en serverresurs.
String
Boolean
Long
Double
Calendar
Value
String[]
Boolean[]
Long[]
Calendar[]
Värde[]
Returnerar värdena om detta är en JCR-egenskapsbaserad resurs (och värdet passar).
EtiketteradResurs
Om detta är en JCR-nodbaserad resurs
Sida
Om detta är en JCR-nodbaserad resurs och noden är en cq:Page (eller cq:PseudoPage)
Komponent
Om detta är en cq:Component-nodresurs
Design
Om det här är en designnod (cq:Page)
Mall
Om detta är en cq:Template-nodresurs
Blueprint
Om detta är en cq:Template-nodresurs
Tillgång
Om detta är en dam:Asset-nodresurs
Återgivning
Om det här är en dam:Asset-rendering (not:file under renderingsmappen för en dam:Assert)
Tagg
Om detta är en cq:Tag-nodresurs
UserManager
Baserat på JCR-sessionen om det är en JCR-baserad resurs och användaren har behörighet att komma åt UserManager
Auktoriserbar
Authorizable är det gemensamma grundgränssnittet för användare och grupp
Användare
Användaren är en särskild auktoriseringsfunktion som kan autentiseras och personifieras
SimpleSearch
Söker nedanför resursen (eller använder setSearchIn()) om detta är en JCR-baserad resurs
WorkflowStatus
Arbetsflödesstatus för den angivna sidans/arbetsflödets nyttolastnod
ReplicationStatus
Replikeringsstatus för den angivna resursen eller dess jcr:innehållsundernod (markerad först)
KopplingResurs
Returnerar en anpassad anslutningsresurs för vissa typer, om detta är en JCR-nodbaserad resurs
Konfig
Om detta är en cq:ContentSyncConfig-nodresurs
ConfigEntry
Om detta ligger under en cq:ContentSyncConfig-nodresurs

ResourceResolver anpassas till:

Session
JCR-sessionen för begäran, om detta är en JCR-baserad resurslösare (standard)
PageManager
ComponentManager
Designer
AssetManager
Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare
TagManager
Baserat på JCR-sessionen, om detta är en JCR-baserad resurslösare
UserManager
UserManager ger åtkomst till och möjlighet att underhålla auktoriserbara objekt, det vill säga användare och grupper. UserManager är bundet till en viss session
Kan auktoriseras
Aktuell användare
Användare
Aktuell användare
QueryBuilder
Externalizer
För att externa absoluta URL:er ska kunna utföras, även utan begäranobjektet

SlingHttpServletRequest anpassas till:

Inga mål ännu, men implementerar Adaptable och kan användas som källa i en anpassad AdapterFactory.

SlingHttpServletResponse anpassas till:

ContentHandler
(XML)
Om det här är ett svarsläge från en sling-rewriter

WCM wcm

Sidan anpassas till:

Resurs
Sidans resurs
EtiketteradResurs
Etiketterad resurs (== this)
Nod
Sidans nod
...
Allt som sidans resurs kan anpassas till

Komponenten anpassas till:

Resurs
Komponentens resurs.
LabeledResource
Etiketterad resurs (== this).
Nod
Komponentens nod.
Allt som komponentens resurs kan anpassas till.

Mall anpassas till:

Resurs
Mallens resurs
EtiketteradResurs
Etiketterad resurs (== this)
Nod
Nod för den här mallen
...
Allt som mallens resurs kan anpassas till.

Dokumentskydd security

Behörighetsbar, Användare och ​ Grupp** kan anpassas till:

Nod
Returnerar hemnoden för användaren/gruppen.
ReplicationStatus
Returnerar replikeringsstatusen för användarens/gruppens hemnod.

DAM dam

Resursen anpassas till:

Resurs
Resurs för tillgången.
Nod
Nod för resursen.
Allt som resursen kan anpassas till.

Taggar tagging

Tagg anpassas till:

Resurs
Taggens resurs.
Nod
Taggens nod.
Allt som taggens resurs kan anpassas till.

Övriga other

Dessutom innehåller Sling/JCR/OCM även [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) för anpassade OCM-objekt (Object Content Mapping).

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2