Använda Sling-adaptrar

Senaste uppdatering: 2023-11-07
  • Skapat för:
  • Developer

Sling erbjuder Adaptermönster att enkelt översätta objekt som implementerar Adaptiv gränssnitt. Det här gränssnittet innehåller en allmän 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

Det finns följande användningsområden:

  • Få implementeringsspecifika objekt.

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

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

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

  • Genväg till tjänster.

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

Null-returvärde

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

För att förbättra prestanda kan implementeringar cachelagra objektet som returneras från en obj.adaptTo() ring. Om obj är samma, returnerade objekt är samma.

Denna cachelagring 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 inom AdapterFactoryatt objekt kan återanvändas i det här scenariot.

Så här fungerar det

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

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

  • Av en AdapterFactory, som kan mappa godtyckliga objekt.

    Objekten måste fortfarande implementera Adaptable gränssnitt och måste utöka SlingAdaptable (som klarar adaptTo till en central adapterhanterare).

    Det gör att du kan lägga in kopplingar i adaptTo mekanism för befintliga klasser, som Resource.

  • En kombination av båda.

I det första fallet kan Java™-dokumenten ange vad adaptTo-targets är möjliga. Detta är dock ofta inte möjligt för vissa underklasser, t.ex. JCR-baserade resurser. I det senare fallet ska AdapterFactory är vanligtvis en del av de privata klasserna i ett paket och därför inte exponeras i ett klient-API, och inte heller listas i Java™-dokument. Teoretiskt sett skulle det vara möjligt att få tillgång till alla AdapterFactory implementeringar från OSGi runtime-modulen för tjänster och se hur deras"adaptable"-konfigurationer (källor och mål) ser ut, men inte för 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

Sling

Resurs anpassar sig 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) genom att använda
ResourceUtil.getValueMap(Resource) (hanterar gemener och så vidare)
ArvValueMap Utökning av ValueMap som gör det möjligt att ta hänsyn till resurshierarkin vid sökning efter egenskaper
ModiitableValueMap En förlängning av ValueMapsom gör att du kan ändra egenskaper på den noden
InputStream Returnerar det binära innehållet i en filresurs (om detta är en JCR-nodbaserad resurs och nodtypen är nt:file eller nt:resource, om det här är en paketresurs, filinnehåll om det ä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.
Sträng
Boolean
Lång
Dubbel
Kalender
Värde
Sträng[]
Boolean[]
Long[]
Kalender[]
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 detta ä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 är under en cq:ContentSyncConfig nodresurs

ResursResolver anpassar sig 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
Auktoriserbar Aktuell användare
Användare
Aktuell användare
QueryBuilder
Externalizer För att externalisera absoluta URL:er, även utan objektet request

SlingHttpServletRequest anpassar sig till:

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

SlingHttpServletResponse anpassar sig till:

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

WCM

Sida anpassar sig till:

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

Komponent anpassar sig till:

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

Mall anpassar sig till:

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

Dokumentskydd

Auktoriserbar, Användare och ​ Grupp** anpassa till:

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

DAM

Tillgång anpassar sig till:

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

Taggar

Tagg anpassar sig till:

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

Övriga

Dessutom ger Sling/JCR/OCM [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) för anpassad OCM (Mappning av objektinnehåll).

På denna sida