2

我正在尝试在 Adob​​e CQ5 安装中使用 servlet-api 版本 3,但没有取得多大成功。

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

问题是启动使用 api v3 的包。我收到一个我无法完全理解的 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”的约束冲突

归咎于 [[250.9] 包;(&(package=javax.servlet)(version>=3.0.0)(!(version>=4.0.0)))]

并使用约束 22.1.javax.servlet

归咎于 [[250.9] 包;(package=com.day.cq.wcm.foundation.forms), [210.0] 包;(&(package=org.apache.sling.api.resource)(version>=2.0.0)), [93.0] 包;(&(package=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;导入包中的 version="2.4"。但它以某种方式从 (22) 解析为 javax.servlet,version=2.5.0 。

问题似乎与捆绑 250 的依赖关系有关,但我不确定是什么问题。AFAIK 两个版本的包可以共存于一个 OSGi 容器中。捆绑包 210 和 93 运行时没有问题。

4

2 回答 2

0

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

于 2013-07-04T15:06:21.587 回答
0

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

因此,唯一的选择是删除我的捆绑包与其他捆绑包的依赖关系,恐怕我做不到。我将不得不处理没有 V3 api

于 2013-07-05T09:11:38.110 回答