【问题标题】:javax.servlet.http package in Apache Karaf 2.3.0Apache Karaf 2.3.0 中的 javax.servlet.http 包
【发布时间】:2012-10-28 22:45:43
【问题描述】:

我已经安装了 Apache Karaf 2.3.0。我的其中一个需要安装的包使用来自javax.servlet.http 包的类。当我尝试安装捆绑包时,它给了我错误消息:

karaf@root> ERROR: Bundle com.groupgti.esb.purge [207] Error starting mvn:com.groupgti.esb/esb.purge/1.0.0 (org.osgi.framework.BundleException: Unresolved constraint in b
undle com.groupgti.esb.purge [207]: Unable to resolve 207.0: missing requirement [207.0] osgi.wiring.package; (osgi.wiring.package=com.groupgti.esb.cxf.interceptors) [cau
sed by: Unable to resolve 212.0: missing requirement [212.0] osgi.wiring.package; (&(osgi.wiring.package=javax.servlet.http)(version>=2.6.0)(!(version>=3.0.0)))])
org.osgi.framework.BundleException: Unresolved constraint in bundle com.groupgti.esb.purge [207]: Unable to resolve 207.0: missing requirement [207.0] osgi.wiring.package
; (osgi.wiring.package=com.groupgti.esb.cxf.interceptors) [caused by: Unable to resolve 212.0: missing requirement [212.0] osgi.wiring.package; (&(osgi.wiring.package=jav
ax.servlet.http)(version>=2.6.0)(!(version>=3.0.0)))]
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
        at java.lang.Thread.run(Thread.java:662)

javax.servlet.http 包是从 mvn:org.apache.geronimo.specs/geronimo-servlet_2.5_spec/1.1.2 系统包导出的。问题是它的版本是 2.5 但我的包至少需要 2.6.0。是否有解决方法或将 geronimo-servlet 更新到与我的包兼容的更高版本? (这是系统捆绑包)。

其他信息:

CXF Version: 2.7.0
Camel Version 2.10.2

编辑:

我忘了提重要的事情。我还将 CXF 更新为 2.7.0 版本,而 CXF 是引入 Servlet 3.0 依赖项的版本。这是依赖树的图:

也许会给你一些关于如何解决这个问题的想法?我唯一能想到的就是回到 CXF 2.6.x

【问题讨论】:

    标签: java osgi cxf apache-karaf osgi-bundle


    【解决方案1】:

    如果您的包确实需要比 2.5 更新的东西,您可能会在 Karaf 2.3.0 上运行它时遇到问题。 Karaf 2.3 使用基于 Servlet 2.5 的 Jetty 7.6.7。它不支持任何新的基于 Servlet 3 的 API 等。您可以升级 servlet-api 包,它可能会工作,但如果您的包/应用程序使用任何 Servlet 3 功能,它可能无法工作。

    Karaf 3 将升级到支持 Servlet 3 的 Jetty 8.1。 Karaf 社区将非常感谢任何帮助测试和解决这个问题。 :-)

    【讨论】:

    • 有很多选择。可能更好地进入 users@cxf.apache.org 列表。您可以排除 jetty 和 servlet-api deps 并将 deps 添加到您想要/需要的版本中。您可以让 maven-bundle-plugin 在生成 MANIFEST 等时使用更广泛的范围......
    【解决方案2】:

    您真的需要使用 geronimo servlet 规范吗?尝试用这个替换它:

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
    

    【讨论】:

    • 这不起作用,因为此时应由 pax-web 提供 servlet 包,并且 Karaf 的 2.3 使用仍然绑定到 Servlet 2.5 的 Pax-Web 1.1.x,Karaf 3.0 将通过完整的 Servlet 3.0 支持支持 Pax-Web 2.1 甚至 3.0
    猜你喜欢
    • 2015-05-22
    • 2014-08-27
    • 2011-12-01
    • 1970-01-01
    • 2012-04-13
    • 2012-07-23
    • 2012-11-02
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多