osgi
  • cq5
  • aem
  • 2017-02-07 12 views 0 likes 
    0

    コンポーネントjspからosgiサービスにSlingRequestオブジェクトを次のように渡そうとしています。しかし、サービスは登録されていません。 (わからない、なぜ?)AEM CQ5がSlingHttpServletRequestオブジェクトをサービスに渡す

    <c:set var="inverterData" value='<%=sling.getService(InverterFactory.class).getOverview(slingRequest, resourceResolver)%>' scope="request" /> 
    

    質問:それはOSGiサービスへのコンポーネントのJSPからSlingRequestオブジェクトを渡すことができますか?許可されている場合、なぜ私のサービスが登録されていません。 SlingRequestオブジェクトを取り出すと、サービスが登録され、jspからサービスを呼び出すことができます。

    答えて

    0

    OOTB /libs/foundation/global.jspを含むと、定義されたデフォルトのタグlibs、スリングオブジェクト、およびCQオブジェクトを取得できます。

    sling.getServiceメソッドにサービスの完全修飾名を渡すと、SlingRepositoryがOSGiバンドル管理コンポーネントによってサービスに注入されます。あなたのコードスニペットsling.getService(InverterFactory.class)サービスで

    はスリングで利用可能なOSGiのサービスを取得するためのsling SlingScriptHelperオブジェクトから取得され、これは一般的にインターフェイス上で呼び出されます。 sling.getServiceを使用してServiceオブジェクトを作成したら、そのサービスによって公開されているすべてのメソッドを呼び出すことができます。

    ScriptHelper APIドキュメントを見てくださいとsling scripting variables

    <% your.qualified.path.InverterFactory Invfac = sling.getService(your.qualified.path.InverterFactory.class); %> <c:set var="inverterData" value='<%=Invfac.getOverview(slingRequest, resourceResolver)%>' scope="request" />

    以下のtryコードスニペットも、私はSlingRequestオブジェクトはすべての問題を起こさなければならないとは思わない、私は持っていますあなたのコードスニペットの構文を試して、ちょうどOSGIサービスからいくつかの文字列を返しました、それはうまく動作します。以下は

    HelloServiceインタフェース

    public interface HelloService { public String getRepositoryName(); public String getRepositoryName(SlingHttpServletRequest slingRequest, ResourceResolver resourceResolver); }

    HelloServiceImpl

    @Service 
    @Component(metatype = false) 
    public class HelloServiceImpl implements HelloService { 
    protected final Logger log = LoggerFactory.getLogger(this.getClass());  
        @Reference 
        private SlingRepository repository; 
        public String getRepositoryName() { 
         return repository.getDescriptor(Repository.REP_NAME_DESC); 
        } 
        public String getRepositoryName(SlingHttpServletRequest slingRequest, ResourceResolver resourceResolver) { 
        log.info("*** Inside my interface impl OSGI ***"); 
        String returnstr = repository.getDescriptor(Repository.REP_NAME_DESC)+" Data from OSGI"; 
         //return repository.getDescriptor(Repository.REP_NAME_DESC); 
         return returnstr; 
        } 
    } 
    

    OSGICalling.jsp

    <%@ page import="com.mycompany.myrestservice.HelloService" %> 
    <% 
    com.mycompany.myrestservice.HelloService hs = sling.getService(com.mycompany.myrestservice.HelloService.class); 
    String repo = hs.getRepositoryName() ; 
    out.println("myrepo::" + repo); 
    %> 
    <c:set var="inverteraa" value='<%=sling.getService(com.mycompany.myrestservice.HelloService.class).getRepositoryName(slingRequest,resourceResolver)%>' /> 
    <c:out value="${inverteraa}"/> 
    
    私の例であります

    アウトプット

    outputosgicall

    関連する問題