Uso de los adaptadores de Sling using-sling-adapters

CAUTION
AEM 6.4 ha llegado al final de la compatibilidad ampliada y esta documentación ya no se actualiza. Para obtener más información, consulte nuestra períodos de asistencia técnica. Buscar las versiones compatibles here.

Sling ofrece un Patrón de adaptador para traducir convenientemente los objetos que implementan la variable Adaptable interfaz. Esta interfaz proporciona un adaptTo() método que traducirá 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 Resource La interfaz de proporciona acceso al JCR subyacente Node.

  • Creación de accesos directos de objetos que requieren que se pasen objetos de contexto internos.

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

  • Acceso directo a los servicios.

    Un caso poco frecuente: sling.getService() también es simple.

Valor devuelto nulo null-return-value

adaptTo() puede devolver null.

Esto se debe a varios motivos, entre ellos:

  • la implementación no admite el tipo de destino
  • un adaptador que maneje este caso no está activo (p. ej. debido a la ausencia de referencias de servicio)
  • error en la condición interna
  • el servicio no está disponible

Es importante que gestione las mayúsculas y minúsculas nulas correctamente. Para las renderizaciones jsp, puede ser aceptable que el 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 desde un obj.adaptTo() llamada a . Si la variable obj es el mismo, el objeto devuelto es el mismo.

Este almacenamiento en caché se realiza para todas las AdapterFactory casos basados en .

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

Funcionamiento how-it-works

Hay varias maneras de que Adaptable.adaptTo() se puede implementar:

  • Por el propio objeto; implementar el propio método y asignar a ciertos objetos.

  • De AdapterFactory, que puede asignar objetos arbitrarios.

    Los objetos deben implementar la variable Adaptable interfaz y debe ampliar SlingAdaptable (que pasa el adaptTo a un administrador central de adaptadores).

    Esto permite los enlaces en la variable adaptTo mecanismo para las clases existentes, como Resource.

  • Una combinación de ambas.

Para el primer caso, los javadocs pueden indicar qué 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 normalmente forman parte de las clases privadas de un paquete y, por lo tanto, no están expuestas en una API de cliente ni están enumeradas en javadocs. En teoría, sería posible acceder a todas las AdapterFactory implementaciones de OSGi tiempo de ejecución del servicio 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 se trata de un recurso basado en nodos JCR o de una propiedad JCR que hace referencia a un nodo.
Propiedad
Si se trata de un recurso basado en propiedades JCR.
Elemento
Si se trata de 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 mapas de valores).
ValueMap
Devuelve un mapa práctico de las propiedades, si se trata de un recurso basado en nodos JCR (u otros mapas de valores compatibles con recursos). También se puede lograr (más simplemente) 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.
PersistableValueMap
Si se trata de un recurso basado en nodos JCR y el usuario tiene permisos para modificar propiedades en ese nodo.
Nota: varios mapas persistentes no comparten sus valores.
InputStream
Devuelve el contenido binario de un "archivo"nt:resource
AuthorizableResourceProvider``org.apache.sling.jackrabbit.usermanager``/system/userManager
cq:Page``cq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

ResourceResolver se adapta a:

Sesión
La sesión JCR de la solicitud, si se trata de una resolución de recursos basada en JCR (predeterminada).
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
En función de la sesión JCR, si se trata de una resolución de recursos basada en JCR y si el usuario tiene permisos para acceder a UserManager.
Con autorización
El usuario actual.
Usuario
El usuario actual.
PrivilegeManager
Preferencias
Preferencias del usuario actual (basadas en la sesión JCR si se trata de una resolución de recursos basada en JCR).
Servicios de preferencias
PinManager
QueryBuilder
Externalizador
Para externalizar direcciones URL absolutas, incluso con el objeto de solicitud .

SlingHttpServletRequest se adapta a:

Aún no hay destinos, pero implementa Adaptable y podría utilizarse como fuente en una fábrica de adaptadores personalizada.

SlingHttpServletResponse se adapta a:

ContentHandler
(XML)
Si se trata de una respuesta de reescritura de Sling.

WCM wcm

Página se adapta a:

Resource
Recurso de la página.
EtiquetadoRecurso
Recurso etiquetado (= esto).
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 (= esto).
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 (= esto).
Nodo
Nodo de esta plantilla.
...
Todo a lo que se puede adaptar el recurso de la plantilla.

Seguridad security

Autorizable, Usuario y Grupo adaptarse a:

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

DAM dam

Activo 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).

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e