Osgi AEM CQ5将SlingHttpServletRequest对象传递给服务

Osgi AEM CQ5将SlingHttpServletRequest对象传递给服务,osgi,aem,Osgi,Aem,我试图将SlingRequest对象从组件jsp传递到osgi服务,如下所示。但该服务尚未注册。(不知道为什么?) 问题:是否允许将SlingRequest对象从组件jsp传递到osgi服务?如果允许,为什么我的服务没有注册。如果我取出SlingRequest对象,服务将被注册,我可以从jsp调用该服务。包括您的OOTB/libs/foundation/global.jsp使您可以获得定义的默认标记libs、sling对象和CQ对象 当您将服务的完全限定名传递给sling.getServic

我试图将SlingRequest对象从组件jsp传递到osgi服务,如下所示。但该服务尚未注册。(不知道为什么?)



问题:是否允许将SlingRequest对象从组件jsp传递到osgi服务?如果允许,为什么我的服务没有注册。如果我取出SlingRequest对象,服务将被注册,我可以从jsp调用该服务。

包括您的OOTB
/libs/foundation/global.jsp
使您可以获得定义的默认标记libs、sling对象和CQ对象

当您将服务的完全限定名传递给
sling.getService
方法时,SlingRepository将由OSGi捆绑包管理的组件注入到服务中

在您的代码片段
sling.getService(InverterFactory.class)
中,从
sling
SlingScriptHelper对象获取服务,以检索sling中可用的OSGi服务,通常会在接口上调用该服务。使用
sling.getService
创建服务对象后,可以调用该服务公开的任何方法

请看一看api文档和

尝试下面的代码片段


另外,我不认为SlingRequest对象会引起任何问题,我已经尝试了您的代码片段语法,并且刚刚从OSGI服务返回了一些字符串,它工作得很好。下面是我的例子

HelloService接口

公共接口HelloService{
公共字符串getRepositoryName();
公共字符串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;
    }
}
oslogicaling.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}"/>

输出

<%@ 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}"/>