我正在尝试将SlingRequest对象从组件jsp传递到osgi服务,如下所示。但该服务尚未注册。 (不知道为什么?)
# This is 2 GB. Pick an appropriate value for your app.
java -Xms2g -Xmx2g -jar my.jar
问题:是否允许将SlingRequest对象从组件jsp传递给osgi服务?如果允许,为什么我的服务没有注册。如果我取出SlingRequest对象,该服务正在注册,我可以从jsp调用该服务。
答案 0 :(得分:0)
包括您的OOTB /libs/foundation/global.jsp
使您获得默认标签libs,吊索对象和定义的CQ对象。
当您将服务的完全限定名称传递给sling.getService
方法时,SlingRepository将被OSGi包管理组件注入服务。
在您的代码段sling.getService(InverterFactory.class)
中,从 sling
SlingScriptHelper对象获取服务,以检索Sling中可用的OSGi服务,这通常会在界面上调用。使用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" />
我也不认为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}"/>
<强>输出强>