Uso de los adaptadores de Sling

Última actualización: 2023-11-07
  • Creado para:
  • Developer

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

Por ejemplo, para traducir un objeto Resource al objeto Node correspondiente, simplemente 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() devuelve null.

Esto se debe a varios motivos, entre ellos:

  • la implementación no admite el tipo de destinatario
  • un fabricante de adaptadores que gestione este caso no está activo (por ejemplo, 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 documentos de Java™ 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 documentos de Java™. 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 mayúsculas y minúsculas nulas, 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 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 es 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 servlet.
Cadena
Booleano
Largo
Doble
Calendario
Valor
Cadena[]
Booleano[]
Long[]
Calendario[]
Valor[]
Devuelve los valores si se trata de un recurso basado en la propiedad JCR (y el valor se ajusta).
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 dam:Asset node
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 En función de la sesión JCR, si se trata de 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 Busca debajo del recurso (o use setSearchIn()) si es un recurso basado en JCR
WorkflowStatus Estado del flujo de trabajo para la página o el nodo de carga útil del flujo de trabajo dado
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 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, es decir, usuarios y grupos, y los medios para mantenerlos. UserManager está enlazado a una sesión en particular
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