Valor de Retorno Nulo

adaptTo() pode retornar nulo.

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

  • a implementação não suporta o tipo de alvo
  • uma fábrica de adaptadores que manipula este caso não está ativa (por exemplo, devido à falta de referências de serviço)
  • falha na condição interna
  • serviço não disponível

É importante lidar com o caso nulo normalmente. Para renderizações de jsp, pode ser aceitável ter a falha de jsp se isso resultar em um conteúdo vazio.

Armazenamento em cache

Para melhorar o desempenho, as implementações podem armazenar em cache o objeto retornado de um 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á regra geral - o objeto pode ser uma nova instância ou uma existente. Isso significa que você não pode depender de nenhum dos comportamentos. Por isso é importante, especialmente dentro AdapterFactory, que os objetos são reutilizáveis neste cenário.

Como funciona

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

  • Pelo próprio objeto; implementação do próprio método e mapeamento para determinados objetos.

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

    Os objetos ainda devem implementar a variável Adaptable e deve estender SlingAdaptable (que passa pela variável adaptTo para um gerenciador central de adaptadores).

    Isso permite que os ganchos no adaptTo mecanismo para classes existentes, como Resource.

  • Uma combinação de ambos.

No primeiro caso, o javadocs pode 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. No último caso, as implementações de AdapterFactory normalmente fazem parte das classes privadas de um pacote e, portanto, não são expostas em uma API do cliente, nem listadas em javadocs. Teoricamente, seria possível acessar todos AdapterFactory das OSGi tempo de execução do serviço e veja suas configurações "adaptáveis" (fontes e destinos), mas não para mapeá-las umas às outras. No fim, isso depende da lógica interna, que deve ser documentada. Daí esta referência.

Referência

Sling

Recurso se adapta a:

Se esse for um recurso baseado em nó JCR ou uma propriedade JCR que faz referência a um nó.
PropriedadeSe esse for um recurso baseado em propriedade do JCR.
ItemSe esse for um recurso baseado em JCR (nó ou propriedade).
MapaRetorna um mapa das propriedades, se este for um recurso baseado em nó JCR (ou outro recurso que suporta mapas de valor).
ValueMapRetorna um mapa conveniente das propriedades, se for um recurso baseado em nó JCR (ou outro recurso que suporta mapas de valor). Também pode ser obtido (mais simplesmente) usando
ResourceUtil.getValueMap(Resource) (lida com letras maiúsculas e minúsculas, etc.).
InheritanceValueMapProrrogação ValueMap O que permite que a hierarquia de recursos seja levada em conta ao procurar propriedades.
PersistableValueMapSe esse for um recurso baseado em nó JCR e o usuário tiver permissões para modificar propriedades nesse nó.
Observação: vários mapas persistentes não compartilham seus valores.
InputStreamRetorna o conteúdo binário de um "arquivo"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:

SessãoA sessão JCR da solicitação, se for um resolvedor de recursos baseado em JCR (padrão).
PageManager
ComponentManager
Designer
AssetManagerCom base na sessão JCR, se este for um resolvedor de recursos baseado em JCR.
TagManagerCom base na sessão JCR, se este for um resolvedor de recursos baseado em JCR.
UserManagerCom base na sessão JCR, se este for um resolvedor de recursos baseado em JCR e se o usuário tiver permissões para acessar o UserManager.
AutorizávelO usuário atual.
UsuárioO usuário atual.
PrivilegeManager
PreferênciasPreferências do usuário atual (com base na sessão JCR, se este for um resolvedor de recursos baseado em JCR).
PreferencesService
PinManager
QueryBuilder
ExternalizadorPara exteriorizar URLs absolutos, mesmo sem o objeto de solicitação.

SlingHttpServletRequest se adapta a:

Nenhum destino ainda, mas implementa Adaptável e pode ser usado como fonte em um AdapterFactory personalizado.

SlingHttpServletResponse se adapta a:

ContentHandler
(XML)
Se esta for uma resposta de gravação de sling.

WCM

Página se adapta a:

RecursoRecurso da página.
RotuladoRecursoRótulo de recurso (== this).
Nó da página.
...Tudo que o recurso da página pode ser adaptado.

Componente se adapta a:

RecursoRecurso do componente.
RotuladoRecursoRótulo de recurso (== this).
Nó do componente.
Tudo que o recurso do componente pode ser adaptado.

Modelo se adapta a:

RecursoRecurso do modelo.
RotuladoRecursoRótulo de recurso (== this).
Nó desse template.
...Tudo que o recurso do modelo pode ser adaptado.

Segurança

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

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

DAM

Ativo se adapta a:

RecursoRecurso do ativo.
Nó do ativo.
Tudo o que o recurso do ativo pode ser adaptado.

Marcação com tags

Tag se adapta a:

RecursoRecurso da tag.
Nó da tag.
Tudo que o recurso da tag pode ser adaptado.

Outro

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

Experience Manager