Uso de adaptadores Sling using-sling-adapters

Sling oferece um Padrão do adaptador para traduzir convenientemente objetos que implementam a Adaptável interface. Essa interface fornece uma interface adaptTo() método que traduz o objeto para o tipo de classe que está sendo transmitido como argumento.

Por exemplo, para traduzir um objeto Resource para o objeto Node correspondente, você pode simplesmente fazer:

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

Casos de uso use-cases

Existem os seguintes casos de uso:

  • Obter objetos específicos de implementação.

    Por exemplo, uma implementação baseada em JCR do genérico Resource fornece acesso ao JCR subjacente Node.

  • Criação de atalhos de objetos que exigem que objetos de contexto interno sejam passados.

    Por exemplo, a variável baseada em JCR ResourceResolver mantém uma referência à solicitação do JCR Session, que por sua vez é necessário para muitos objetos que funcionarão com base nessa sessão de solicitação, como o PageManager ou UserManager.

  • Atalho para serviços.

    Um caso raro - sling.getService() também é simples.

Valor de retorno nulo null-return-value

adaptTo() retorna nulo.

Há várias razões para isso, incluindo:

  • a implementação não dá suporte ao tipo de destino
  • uma fábrica de adaptadores que lida com esse caso não está ativa (por exemplo, devido a referências de serviço ausentes)
  • falha na condição interna
  • serviço não disponível

É importante que você lide com o caso nulo normalmente. Para renderizações jsp, pode ser aceitável que o jsp falhe se isso resultar em um conteúdo vazio.

Armazenamento em cache caching

Para melhorar o desempenho, as implementações estão livres para armazenar em cache o objeto retornado de uma obj.adaptTo() chame. Se a variável obj for o mesmo, o objeto retornado será o mesmo.

Esse armazenamento em cache é executado para todos AdapterFactory casos baseados.

No entanto, não há uma regra geral: o objeto pode ser uma nova instância ou uma existente. Isso significa que você não pode confiar em nenhum dos comportamentos. Por isso, é importante, especialmente dentro AdapterFactory, de que os objetos são reutilizáveis nesse cenário.

Como funciona how-it-works

Há várias maneiras de Adaptable.adaptTo() pode ser implementado:

  • Pelo próprio objeto; implementando o próprio método e mapeando para determinados objetos.

  • Por um AdapterFactory, que podem mapear objetos arbitrários.

    Os objetos ainda devem implementar o Adaptable e deve estender SlingAdaptable (que passa o adaptTo chamada para um gerenciador de adaptador central).

    Isso permite que ganchos na adaptTo para classes existentes, como Resource.

  • Uma combinação de ambos.

Para o primeiro caso, os documentos Java™ podem indicar o que adaptTo-targets são possíveis. No entanto, para subclasses específicas, como o Recurso baseado em JCR, geralmente isso não é possível. Neste último caso, as AdapterFactory normalmente fazem parte das classes privadas de um pacote e, portanto, não estão expostas em uma API do cliente, nem listadas em documentos Java™. Teoricamente, seria possível aceder a todas as AdapterFactory implementações do OSGi tempo de execução do serviço e observar as configurações (fontes e destinos) de "adaptáveis", mas não mapeá-las entre si. No final, isso depende da lógica interna, que deve ser documentada. Daí esta referência.

Referência reference

Sling sling

Recurso adapta-se a:

Se este for um recurso baseado em nó JCR ou uma propriedade JCR que faz referência a um nó.
Propriedade
Se este for um recurso baseado em propriedades JCR
Item
Se este for um recurso baseado em JCR (nó ou propriedade)
Mapa
Retorna um mapa das propriedades, se este for um recurso baseado em nó JCR (ou outros recursos que suportam mapas de valores)
ValueMap
Retorna um mapa conveniente de propriedades se este for um recurso baseado em nó JCR (ou outro recurso que suporte mapas de valor). Também pode ser obtida (de forma mais simples) utilizando
ResourceUtil.getValueMap(Resource) (trata maiúsculas e minúsculas e assim por diante)
InheritanceValueMap
Extensão do ValueMap que permite que a hierarquia de recursos seja considerada ao procurar propriedades
ModisibleValueMap
Uma extensão do ValueMap, que permite modificar propriedades nesse nó
InputStream
Retorna o conteúdo binário de um recurso de arquivo (se este for um recurso baseado em nó JCR e o tipo de nó for nt:file ou nt:resource; se esse for um recurso de pacote; conteúdo do arquivo, se for um recurso do sistema de arquivos) ou os dados de um recurso binário de propriedade JCR
URL
Retorna um URL para o recurso (URL do repositório deste nó se este for um recurso baseado em nó JCR; URL do pacote jar se este for um recurso do pacote; URL do arquivo se este for um recurso do sistema de arquivos)
Arquivo
Se este for um recurso do sistema de arquivos
SlingScript
Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com o sling
Servlet
Se esse recurso for um script (por exemplo, arquivo jsp) para o qual um mecanismo de script está registrado com o sling ou se for um recurso de servlet.
String
Booleano
Longo
Duplo
Calendário
Valor
String[]
Booleano[]
Long[]
Calendário[]
Valor[]
Retorna os valores se este for um recurso baseado em propriedades JCR (e o valor se ajustar).
RecursoRotulado
Se este for um recurso baseado em nó JCR
Página
Se este for um recurso baseado em nó JCR e o nó for um cq:Page (ou cq:PseudoPage)
Componente
Se isso for um cq:Component recurso de nó
Design
Se este for um nó de design (cq:Page)
Modelo
Se isso for um cq:Template recurso de nó
Blueprint
Se isso for um cq:Template recurso de nó
Ativo
Se este for um recurso do nó dam:Asset
Representação
Se for uma representação dam:Asset (nt:file na pasta de representação de um dam:Assert)
Tag
Se isso for um cq:Tag recurso de nó
UserManager
Baseado na sessão JCR, se este for um recurso baseado em JCR e o usuário tiver permissões para acessar o UserManager
Autorizável
A Autorizável é a interface básica comum para usuários e grupos
Usuário
O usuário é um Authorizable especial que pode ser autenticado e representado
PesquisaSimples
Pesquisa abaixo o recurso (ou use setSearchIn()) se este for um recurso baseado em JCR
WorkflowStatus
Status do fluxo de trabalho para determinada página/nó de carga do fluxo de trabalho
StatusReplicação
Status de replicação para o recurso fornecido ou seu subnó jcr:content (marcado primeiro)
ConnectorResource
Retorna um recurso de conector adaptado para determinados tipos, se este for um recurso baseado em nó JCR
Configuração
Se isso for um cq:ContentSyncConfig recurso de nó
ConfigEntry
Se isso estiver abaixo de um cq:ContentSyncConfig recurso de nó

ResourceResolver adapta-se a:

Session
A sessão JCR da solicitação, se for um resolvedor de recursos baseado em JCR (padrão)
PageManager
ComponentManager
Designer
AssetManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR
TagManager
Com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR
UserManager
O UserManager fornece acesso e meios para manter objetos autorizáveis, ou seja, usuários e grupos. O UserManager está associado a uma sessão específica
Autorizável
O usuário atual
Usuário
O usuário atual
QueryBuilder
Externalizador
Para externalizar URLs absolutos, mesmo sem o objeto de solicitação

SlingHttpServletRequest adapta-se a:

Ainda sem destinos, mas implementa Adaptable e pode ser usado como origem em um AdapterFactory personalizado.

SlingHttpServletResponse adapta-se a:

ManipuladordeConteúdo
(XML)
Se esta for uma resposta de reescrita do sling

WCM wcm

Página adapta-se a:

Recurso
Recurso da página
RecursoRotulado
Recurso rotulado (== este)
Nó da página
..
Tudo ao qual o recurso da página pode ser adaptado

Componente adapta-se a:

Recurso
Recurso do componente.
RecursoRotulado
Recurso rotulado (== este).
Nó do componente.
Tudo ao qual o recurso do componente pode ser adaptado.

Modelo adapta-se a:

Recurso
Recurso do modelo
RecursoRotulado
Recurso rotulado (== este)
Nó deste modelo
...
Tudo ao qual o recurso do modelo pode ser adaptado.

Segurança security

Autorizável, Usuário e ​ Grupo** adaptar a:

Retorna o nó inicial do usuário/grupo.
StatusReplicação
Retorna o status de replicação do nó inicial do usuário/grupo.

DAM dam

Ativo adapta-se a:

Recurso
Recurso do ativo.
Nó do ativo.
Tudo ao qual o recurso do ativo pode ser adaptado.

Marcação com tags tagging

Tag adapta-se a:

Recurso
Recurso da tag.
Nó da tag.
Tudo ao qual o recurso da tag pode ser adaptado.

Outro other

Além disso, o Sling/JCR/OCM também fornece uma [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) para OCM personalizado (Mapeamento de conteúdo do objeto) objetos.

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