Uso de los adaptadores de Sling

Sling ofrece un Patrón de adaptador para traducir convenientemente los objetos que implementan el Adaptable interfaz. Esta interfaz proporciona un adaptTo() que traducirá el objeto al tipo de clase que se pasa como argumento.

Por ejemplo, para traducir un objeto Resource al objeto Node correspondiente, puede hacer lo siguiente:

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

Casos de uso

Hay los siguientes casos de uso:

  • Obtenga objetos específicos de la implementación.

    Por ejemplo, una implementación basada en JCR del genérico Resource proporciona acceso al JCR subyacente Node.

  • Creación de acceso directo de objetos que requieren que se pasen objetos de contexto interno.

    Por ejemplo, el basado en JCR ResourceResolver contiene una referencia al de la solicitud JCR Session, que a su vez es necesaria para muchos objetos que funcionarán en función de esa sesión de solicitud, como la PageManager o UserManager.

  • Acceso directo a servicios.

    Un caso raro - sling.getService() es simple también.

Valor devuelto nulo

adaptTo() puede devolver null.

Esto se debe a varios motivos, entre ellos:

  • la implementación no admite el tipo de destinatario
  • un adaptador de fábrica que maneja este caso no está activo (p. ej. debido a la falta de referencias de servicio)
  • error de condición interna
  • el servicio no está disponible

Es importante que gestione correctamente el caso nulo. Para las representaciones jsp, puede ser aceptable que jsp falle si esto resulta en un fragmento de contenido vacío.

Almacenamiento en caché

Para mejorar el rendimiento, las implementaciones pueden almacenar en caché el objeto devuelto por un obj.adaptTo() llamada. Si la variable obj es el mismo, el objeto devuelto es el mismo.

Este almacenamiento en caché se realiza para todos los AdapterFactory casos basados en.

Sin embargo, no hay una regla general: el objeto podría ser una instancia nueva o una existente. Esto significa que no puede confiar en ninguno de los comportamientos. Por lo tanto, es importante, especialmente en el interior AdapterFactory, que los objetos se pueden reutilizar en este escenario.

Funcionamiento

Hay varias formas en que Adaptable.adaptTo() se puede implementar:

  • Por el propio objeto; implementando el método en sí y asignándolo a determinados objetos.

  • Por un AdapterFactory, que puede asignar objetos arbitrarios.

    Los objetos aún deben implementar el Adaptable interfaz y debe ampliarse SlingAdaptable (que pasa el adaptTo llamada a un administrador de adaptadores central).

    Esto permite la conexión a adaptTo mecanismo para clases existentes, como Resource.

  • Una combinación de ambos.

En el primer caso, los javadocs pueden indicar lo siguiente adaptTo-targets son posibles. Sin embargo, para subclases específicas como el recurso basado en JCR, a menudo esto no es posible. En este último caso, las implementaciones de AdapterFactory suelen formar parte de las clases privadas de un paquete y, por lo tanto, no se exponen en una API de cliente ni se enumeran en javadocs. En teoría, sería posible acceder a todas las AdapterFactory implementaciones desde el OSGi tiempo de ejecución del servicio de y observe sus configuraciones "adaptables" (fuentes y destinos), pero no para asignarlas entre sí. Al final, esto depende de la lógica interna, que debe documentarse. De ahí esta referencia.

Referencia

Sling

Recurso se adapta a:

Nodo Si es un recurso basado en nodos JCR o una propiedad JCR que hace referencia a un nodo.
Propiedad Si es un recurso basado en propiedades JCR.
Elemento Si es un recurso basado en JCR (nodo o propiedad).
Asignar Devuelve un mapa de las propiedades, si se trata de un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores).
ValueMap Devuelve un mapa práctico de las propiedades, si se trata de un recurso basado en nodos JCR (u otro recurso que admita asignaciones de valores). También se puede lograr (de forma más sencilla) utilizando
ResourceUtil.getValueMap(Resource) (gestiona casos nulos, etc.).
InheritanceValueMap Extensión de ValueMap que permite tener en cuenta la jerarquía de recursos al buscar propiedades.
ModillableValueMap Una extensión del ValueMap, que le permite modificar las propiedades de ese nodo.
InputStream Devuelve el contenido binario de un recurso de archivo (si es un recurso basado en nodos JCR y el tipo de nodo es nt:file o nt:resource; si es un recurso de paquete; contenido de archivo (si es un recurso del sistema de archivos) o los datos de un recurso de propiedad JCR binario.
URL Devuelve una URL al recurso (URL del repositorio de este nodo si es un recurso basado en nodos JCR; URL del paquete jar si es un recurso del paquete; URL del archivo si es un recurso del sistema de archivos).
Archivo Si se trata de un recurso del sistema de archivos.
SlingScript Si este recurso es una secuencia de comandos (por ejemplo, un archivo jsp) para la que un motor de secuencias de comandos está registrado con sling.
Servlet Si este recurso es un script (por ejemplo, un archivo jsp) para el que un motor de scripts está registrado con sling o si es un recurso de servlet.
Cadena
Booleano
Largo
Doble
Calendario
Valor
Cadena[]
Booleano[]
Long[]
Calendario[]
Valor[]
Devuelve los valores si se trata de un recurso basado en una propiedad JCR (y encaja el valor).
EtiquetadoRecurso Si es un recurso basado en nodos JCR.
Página Si es un recurso basado en nodos JCR y el nodo es un cq:Page (o cq:PseudoPage).
Componente Si se trata de un cq:Component recurso de nodo.
Diseño Si es un nodo de diseño (cq:Page).
Plantilla Si se trata de un cq:Template recurso de nodo.
Modelo Si se trata de un cq:Template recurso de nodo.
Recurso Si es un recurso de nodo dam:Asset.
Representación Si es una representación dam:Asset (nt:file bajo la carpeta de representación de dam:Assert)
Etiqueta Si se trata de un cq:Tag recurso de nodo.
UserManager Se basa en la sesión JCR si es un recurso basado en JCR y el usuario tiene permisos para acceder a UserManager.
Con autorización El autorizable es la interfaz base común para usuarios y grupos.
Usuario El usuario es un autorizable especial que puede autenticarse y suplantarse.
SimpleSearch Realiza búsquedas debajo del recurso (o utiliza setSearchIn()) si se trata de un recurso basado en JCR.
WorkflowStatus Estado del flujo de trabajo para el nodo de carga útil de página/flujo de trabajo determinado.
ReplicationStatus Estado de replicación para el recurso determinado o su subnodo jcr:content (comprobado primero).
ConnectorResource Devuelve un recurso de conector adaptado para ciertos tipos, si es un recurso basado en nodos JCR.
Configuración Si se trata de un cq:ContentSyncConfig recurso de nodo.
ConfigEntry Si es inferior a cq:ContentSyncConfig recurso de nodo.

ResourceResolver se adapta a:

Session La sesión JCR de la solicitud, si se trata de una resolución de recursos basada en JCR (valor predeterminado).
PageManager  
ComponentManager  
Designer  
AssetManager En función de la sesión JCR, si se trata de una resolución de recursos basada en JCR.
TagManager En función de la sesión JCR, si se trata de una resolución de recursos basada en JCR.
UserManager UserManager proporciona acceso a objetos autorizables y medios para mantenerlos, es decir, usuarios y grupos. UserManager está enlazado a una sesión concreta.
Con autorización El usuario actual.
Usuario
El usuario actual.
QueryBuilder
Externalizador Para externalizar direcciones URL absolutas, incluso sin el objeto de solicitud.

SlingHttpServletRequest se adapta a:

Aún no hay destinos, pero implementa Adaptable y podría utilizarse como origen en un AdapterFactory personalizado.

SlingHttpServletResponse se adapta a:

ContentHandler
(XML)
Si es una respuesta de reescritura de sling.

WCM

Página se adapta a:

Resource
Recurso de la página.
EtiquetadoRecurso Recurso etiquetado (==).
Nodo Nodo de la página.
... Todo a lo que se puede adaptar el recurso de la página.

Componente se adapta a:

Resource Recurso del componente.
EtiquetadoRecurso Recurso etiquetado (==).
Nodo Nodo del componente.
Todo a lo que se puede adaptar el recurso del componente.

Plantilla se adapta a:

Resource
Recurso de la plantilla.
EtiquetadoRecurso Recurso etiquetado (==).
Nodo Nodo de esta plantilla.
... Todo a lo que se puede adaptar el recurso de la plantilla.

Seguridad

Autorizable, Usuario y Grupo adaptar a:

Nodo Devuelve el nodo principal del usuario/grupo.
ReplicationStatus Devuelve el estado de replicación del nodo principal del usuario/grupo.

DAM

Recurso se adapta a:

Resource Recurso del recurso.
Nodo Nodo del recurso.
Todo a lo que se puede adaptar el recurso del recurso.

Etiquetado

Etiqueta se adapta a:

Resource Recurso de la etiqueta.
Nodo Nodo de la etiqueta.
Todo a lo que se puede adaptar el recurso de la etiqueta.

Otro

Además, Sling/JCR/OCM también proporciona un [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) para OCM personalizado (Asignación de contenido de objeto) objetos.

En esta página