2017-12-20 12 views
0

AEM 서블릿을 만들었습니다. 이제 서비스로 정의되기 때문에 servlet 자체와 함께 OSGi 구성 (MULTI_FIELD 유형 배열 아래에 표시됨)을 작성했습니다. 자, 내 요구 사항 doGet 방법 안에이 osgi 구성에 액세스하는 방법입니다. 여기에 서블릿의 코드가있다.AEM 6.2 서블릿 자체와 함께 정의 된 OSGI 구성에 액세스하는 방법

@Component(label = "Sample Servlet", description = "Sample Servlet", immediate = true, metatype = true) 
@Service 
@Properties(value = { 
    @Property(name = "sling.servlet.resourceTypes", value = { 
    GlobalConstants.RES_TYPE, 
      GlobalConstants.PAGE_RES_TYPE }, propertyPrivate = 
true), 
    @Property(name = "sling.servlet.selectors", value = { 
GlobalConstants.PAGES, 
      GlobalConstants.ASSETS }, propertyPrivate = true), 
    @Property(name = "sling.servlet.extensions", value = "xml", 
propertyPrivate = true), 

    @Property(name = "sling.servlet.methods", value = { "GET" }) }) 

public class SampleServlet extends SlingAllMethodsServlet { 


@Property(value={"English", "Hindi"}, unbounded = 
PropertyUnbounded.ARRAY, label = "Subjects", cardinality = 50, 
description = "Example for Multi field config") 
private static final String MULTI_FIELD = "multifield"; 

    @Override 
protected void doGet(final SlingHttpServletRequest request, final 
SlingHttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

} 

답변

0

당신은 activate 메소드 내에서 멤버 필드에 속성 값을 설정해야합니다

@Activate 
protected void activate(final BundleContext bundleContext, 
         final Map<String, Object> componentConfig) { 
    this.multiField = (String[]) componentConfig.get(MULTI_FIELD); 
} 

나는 코드 나 자신 시도하지 않았다하지만 몇 가지 아이디어를 제공 할 수 있습니다. Sling Main Servlet에서 작동 방식을 확인할 수 있습니다 : http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.engine-2.2.6/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java

+0

이 완벽하게 작동합니다 같은

방법은 보일 것이다. – user2581831

0

나는 이것이 활성화 방법 내에서 처리되어야한다는 점에 동의합니다. 그러나 6.2에서는 덮어 쓰기 된 메서드에 하나의 매개 변수 만 있으므로 캐스팅 대신 PropertiesUtil을 사용합니다.

@Activate 
    public void activate(final ComponentContext componentContext) { 
     final Dictionary<?, ?> props = componentContext.getProperties(); 
     this.multiField = Arrays.asList(PropertiesUtil.toStringArray(props.get(MULTI_FIELD), new String[0])); 
    } 
+0

감사합니다. 6.2.25.SP1-CFP3에서 Emin 방식에 따라 두 개의 다른 매개 변수로 activate 메소드를 사용할 수 있습니다. 당신은 이것에 어떤 문제점을 예견합니까? – user2581831

+0

나는 이것이 더 이상 사용되지 않으며 SCR 버전에 의존한다고 생각했다. 그러나 내가 알기에 이것은 사실이 아닙니다 : https://issues.apache.org/jira/browse/FELIX-925. 그래서 안전하게 Emins 메소드 시그니처를 사용할 수도 있고, 속성 맵을 직접 전달할 수도 있고 심지어 매개 변수를 전혀 전달하지 않을 수도 있습니다 (그런 다음 속성에 액세스 할 수 없습니다 :)). – iusting