Sling 어댑터 사용

Sling 오퍼 어댑터 패턴 구현된 객체를 간편하게 번역하려면 적응성 인터페이스. 이 인터페이스는 일반 을 제공합니다 adaptTo() 개체를 인수로 전달되는 클래스 형식으로 변환하는 메서드입니다.

예를 들어 Resource 개체를 해당 Node 개체로 변환하려면 다음을 간단히 수행할 수 있습니다.

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

사용 사례

다음과 같은 사용 사례가 있습니다.

  • 구현별 개체를 가져옵니다.

    예를 들어, 제네릭의 JCR 기반 구현 Resource 인터페이스는 기본 JCR에 대한 액세스 권한을 제공합니다. Node.

  • 내부 컨텍스트 개체를 전달해야 하는 개체의 바로 가기 만들기

    예를 들어 JCR 기반 ResourceResolver 요청의 JCR Session과 같이 해당 요청 세션을 기반으로 작동하는 많은 개체에 대해 이 작업이 필요합니다. PageManager 또는 UserManager.

  • 서비스에 대한 바로 가기.

    드문 사례 - sling.getService() 간단합니다.

Null 반환 값

adaptTo() null을 반환할 수 있습니다.

다음과 같은 여러 가지 이유가 있습니다.

  • 구현은 target 유형을 지원하지 않습니다
  • 이 케이스를 처리하는 어댑터 팩터리가 활성 상태가 아닙니다(예: 서비스 참조가 누락되어)
  • 내부 조건이 실패했습니다.
  • 서비스를 사용할 수 없습니다.

null 케이스를 적절하게 처리하는 것이 중요합니다. jsp 렌더링의 경우 컨텐츠가 비어 있는 경우 jsp에 오류가 발생할 수 있습니다.

캐싱

성능을 개선하기 위해 구현은 자유롭게 obj.adaptTo() 호출. 만약 obj 는 동일하고 반환된 개체는 동일합니다.

이 캐싱은 모든 경우에 수행됩니다 AdapterFactory 기반 사례.

그러나 일반 규칙이 없습니다. 개체가 새 인스턴스이거나 기존 인스턴스일 수 있습니다. 즉, 두 동작에 의존할 수 없습니다. 따라서 그것은 특히 내부에서 중요합니다 AdapterFactory로 설정되면 이 시나리오에서는 해당 개체를 다시 사용할 수 있습니다.

작동 방법

다음과 같은 다양한 방법이 있습니다 Adaptable.adaptTo() 를 구현할 수 있습니다.

  • 개체 자체에 의해; 메서드 자체를 구현하고 특정 객체에 매핑합니다.

  • 기준 AdapterFactory- 임의의 개체를 매핑할 수 있습니다.

    개체는 여전히 Adaptable 인터페이스 및 확장 필요 SlingAdaptable (이 adaptTo 중앙 어댑터 관리자 호출).

    후크를 사용하여 adaptTo 기존 클래스의 메커니즘(예: Resource.

  • 둘 다 조합입니다.

첫 번째 경우 javadocs에 adaptTo-targets 가능합니다. 그러나 JCR 기반 리소스와 같은 특정 하위 클래스의 경우 이 작업이 불가능한 경우가 많습니다. 후자의 경우 AdapterFactory 는 일반적으로 번들의 개인 클래스의 일부이며, 따라서 클라이언트 API에 노출되거나 javadocs에 나열되지 않습니다. 이론적으로, 모든 사람들이 AdapterFactory 구현에서 OSGi 서비스 런타임에서 해당 "adapttable"(소스 및 타겟) 구성을 확인하지만 서로 매핑하지 않습니다. 결국, 이것은 문서화되어야 하는 내부 논리에 따라 다릅니다. 따라서 이 참조는

참조

슬링

리소스 다음 사항에 맞게 조정:

노드 JCR 노드 기반 리소스이거나 노드를 참조하는 JCR 속성입니다.
속성 JCR 속성 기반 리소스인 경우.
항목 JCR 기반 리소스(노드 또는 속성)인 경우
JCR 노드 기반 리소스(또는 기타 리소스 지원 값 맵)인 경우 속성 맵을 반환합니다.
ValueMap JCR 노드 기반 리소스(또는 기타 리소스 지원 값 맵)인 경우 속성의 사용하기 쉬운 맵을 반환합니다. 를 사용하여 (보다 간단하게) 구현할 수도 있습니다
ResourceUtil.getValueMap(Resource) (null 케이스 등을 처리합니다).
상속 값 맵 확장 ValueMap 속성을 찾을 때 리소스 계층 구조를 고려할 수 있도록 해줍니다.
수정 가능한 값 맵 확장 ValueMap: 해당 노드의 속성을 수정할 수 있습니다.
입력 스트림 파일 리소스의 이진 컨텐츠 반환(JCR 노드 기반 리소스이고 노드 유형이 인 경우) nt:file 또는 nt:resource; 번들 리소스인 경우 파일 시스템 리소스인 경우 파일 컨텐츠나 바이너리 JCR 속성 리소스의 데이터입니다.
URL 리소스(JCR 노드 기반 리소스인 경우 이 노드의 저장소 URL)에 대한 URL을 반환합니다. 번들 리소스인 경우 jar 번들 URL 파일 시스템 리소스인 경우 파일 URL).
파일 파일 시스템 리소스인 경우
SlingScript 이 리소스가 sling에 스크립트 엔진이 등록된 스크립트(예: jsp 파일)인 경우
서블릿 이 리소스가 sling에 스크립트 엔진이 등록되거나 서블릿 리소스인 스크립트(예: jsp 파일)인 경우
문자열
부울
Long
이중
달력

문자열[]
부울[]
Long[]
달력[]
값[]
JCR 속성 기반 리소스인 경우 값을 반환합니다(및 값이 일치함).
LabeledResource JCR 노드 기반 리소스인 경우
페이지 JCR 노드 기반 리소스이고 노드가 cq:Page 또는 cq:PseudoPage).
구성 요소 만약 cq:Component 노드 리소스
디자인 디자인 노드인 경우(cq:Page).
템플릿 만약 cq:Template 노드 리소스
블루프린트 만약 cq:Template 노드 리소스
자산 dam:Asset 노드 리소스입니다.
렌디션 dam:Asset 렌디션인 경우 dam:Assert의 렌디션 폴더 아래에 nt:file
태그 만약 cq:Tag 노드 리소스
UserManager JCR 기반 리소스이고 사용자가 UserManager에 액세스할 권한이 있는 경우 JCR 세션을 기반으로 합니다.
승인 가능 대상 Authorizable은 사용자 및 그룹의 공통 기본 인터페이스입니다.
사용자 사용자는 인증 및 가장할 수 있는 특별한 승인 가능 사용자입니다.
SimpleSearch JCR 기반 리소스인 경우 리소스 아래에서 검색합니다(또는 setSearchIn()).
WorkflowStatus 지정된 페이지/워크플로우 페이로드 노드에 대한 워크플로우 상태입니다.
복제 상태 지정된 리소스 또는 jcr:content 하위 노드에 대한 복제 상태(먼저 선택됨).
ConnectorResource JCR 노드 기반 리소스인 경우 특정 유형에 맞게 조정된 커넥터 리소스를 반환합니다.
구성 만약 cq:ContentSyncConfig 노드 리소스
ConfigEntry 아래에 있는 경우 cq:ContentSyncConfig 노드 리소스

ResourceResolver 다음 사항에 맞게 조정:

Session JCR 기반 리소스 확인자(기본값)인 경우 요청의 JCR 세션입니다.
PageManager  
ComponentManager  
디자이너  
AssetManager JCR 기반 리소스 확인자인 경우 JCR 세션을 기반으로 합니다.
TagManager JCR 기반 리소스 확인자인 경우 JCR 세션을 기반으로 합니다.
UserManager UserManager는 사용자 및 그룹과 같은 권한 있는 개체를 유지 관리할 수 있는 액세스 및 수단을 제공합니다. UserManager가 특정 세션에 바인딩되어 있습니다.
승인 가능 대상 현재 사용자입니다.
사용자
현재 사용자입니다.
QueryBuilder
외부 도우미 절대 URL을 표면화하기 위해, 요청 개체가 있더라도 말이다.

SlingHttpServletRequest 다음 사항에 맞게 조정:

대상이 아직 없지만 Adaptable을 구현하고 사용자 지정 AdapterFactory에서 소스로 사용할 수 있습니다.

SlingHttpServletResponse 다음 사항에 맞게 조정:

ContentHandler
(XML)
sling 재작성기 응답인 경우

WCM

페이지 다음 사항에 맞게 조정:

리소스
페이지의 리소스.
LabeledResource 레이블이 지정된 리소스(이 ==).
노드 페이지의 노드입니다.
... 페이지의 리소스를 조정할 수 있는 모든 것입니다.

구성 요소 다음 사항에 맞게 조정:

리소스 구성 요소의 리소스입니다.
LabeledResource 레이블이 지정된 리소스(이 ==).
노드 구성 요소의 노드입니다.
구성 요소의 리소스에 적용할 수 있는 모든 것입니다.

템플릿 다음 사항에 맞게 조정:

리소스
템플릿의 리소스입니다.
LabeledResource 레이블이 지정된 리소스(이 ==).
노드 이 템플릿의 노드입니다.
... 템플릿의 리소스를 조정할 수 있는 모든 것입니다.

보안

승인 가능, 사용자그룹 적응:

노드 사용자/그룹 홈 노드를 반환합니다.
복제 상태 사용자/그룹 홈 노드에 대한 복제 상태를 반환합니다.

DAM

자산 다음 사항에 맞게 조정:

리소스 자산의 리소스입니다.
노드 자산의 노드입니다.
자산의 리소스를 조정할 수 있는 모든 것입니다.

태깅

태그 다음 사항에 맞게 조정:

리소스 태그의 리소스.
노드 태그의 노드입니다.
태그의 리소스에 적용할 수 있는 모든 것입니다.

기타

또한 Sling / JCR / OCM 은 AdapterFactory 사용자 지정 OCM(개체 콘텐츠 매핑) 내의 아무 곳에나 삽입할 수 있습니다.

이 페이지에서는