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 estenderSlingAdaptable
(que passa pela variáveladaptTo
para um gerenciador central de adaptadores).Isso permite que os ganchos no
adaptTo
mecanismo para classes existentes, comoResource
. -
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.
ResourceResolver se adapta a:
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:
WCM
Página se adapta a:
Componente se adapta a:
Recurso | Recurso do componente. |
---|---|
RotuladoRecurso | Rótulo de recurso (== this). |
Nó | Nó do componente. |
… | Tudo que o recurso do componente pode ser adaptado. |
Modelo se adapta a:
Segurança
Autorizável, Usuário e Grupo adaptar a:
Nó | Retorna o nó inicial do usuário/grupo. |
---|---|
ReplicationStatus | Retorna o status de replicação do nó inicial do usuário/grupo. |
DAM
Ativo se adapta a:
Marcação com tags
Tag se adapta a:
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).