【问题标题】:using servlet-api 3 bundle in adobe CQ5在 adobe CQ5 中使用 servlet-api 3 包
【发布时间】:2013-06-23 07:47:06
【问题描述】:

我正在尝试在 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)(version>=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 运行正常。

【问题讨论】:

标签: osgi aem


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 恐怕问题在于@Moch Daear 的评论。 http servlet 的某些类是通过 bundle 的 api 公开的,因此它们的依赖项需要 2.5 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多