Uso de los adaptadores de Sling using-sling-adapters

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 use-cases

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 null-return-value

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é caching

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 how-it-works

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 reference

Sling 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
Autorizable
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 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:

Recurso
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 security

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 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 tagging

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 other

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.

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