在adobe CQ5中使用servlet-api 3 bundle

时间:2013-06-26 08:50:36

标签: osgi cq5 aem

我正在尝试在Adobe CQ5安装中使用servlet-api版本3,但没有太大成功。

已经有一个包导出javax.servlet包(版本2.5),所以我部署了一个3.1.0版本的包。这个捆绑包开始了。

问题是启动使用api v3的bundle。我得到了一个我无法完全理解的OSGi异常:

  

POST / system / console / bundles / 250 HTTP / 1.1] cqse-httpservice%bundles.pluginTitle:无法启动(org.osgi.framework.BundleException:

     

在现有导入266.0.javax.servlet之间解析模块250.9时对包'javax.servlet'的约束违例

     

BLAMED ON [[250.9]包裹; (及(包=的javax.servlet)(版本> = 3.0.0)((版本>!= 4.0.0)))]

     

并使用约束22.1.javax.servlet

     

BLAMED ON [[250.9]包裹; (package = com.day.cq.wcm.foundation.forms),[210.0] package;    (&(package = org.apache.sling.api.resource)(version> = 2.0.0)),[93.0]    包; (及(包=的javax.servlet)(版本> = 2.4.0))])

  • bundle 266导出javax.servlet v = 3.10(我安装了这个)
  • bundle 22导出javax.servlet v = 2.5(由CQ5提供)
  • bundle 250(mine)从266导入javax.servlet,version = [3.0,4]。它还从210和93导入包。
  • bundle 210从22导入javax.servelt v = 2.5(但清单中的导入没有版本。也许这是问题?)
  • bundle 93有javax.servlet; import-package中的version =“2.4”。但它以某种方式从(22)解析为javax.servlet,version = 2.5.0。

问题似乎是围绕捆绑250的依赖性,但我不确定是什么问题。 AFAIK包的两个版本可以在OSGi容器中共存。捆绑包210和93正在运行而没有问题。

2 个答案:

答案 0 :(得分:0)

这很可能是由于使用的http服务仅支持servlet 2.5,这就是为什么这是预安装的servlet版本。由于您安装了一个servlet 3.0 api,您的软件包确实解决了,但是当它尝试导出由http服务选择的服务时,您会遇到此问题。根本原因是使用的http服务实现。我不知道这是否可行,但您可能会尝试使用Pax-Web 2或3替换http服务版本。从版本2开始,Pax-Web确实支持Servlet API。

答案 1 :(得分:0)

在阅读评论中留下的article之后,我注意到我的bundle的依赖关系暴露了servlet api 2.5的类。这会导致约束并阻止我的捆绑。如果我理解正确,来自包210的类路径将扩展到我的包。

所以,唯一的选择是删除我的捆绑包与其他捆绑包的依赖关系,我恐怕不能这样做。我将不得不在没有V3 api的情况下进行交易