【问题标题】:Restlet in OSGI can not find com/sun/net/httpserver/HttpHandlerOSGI 中的 Restlet 找不到 com/sun/net/httpserver/HttpHandler
【发布时间】:2015-03-27 10:00:11
【问题描述】:

我正在尝试在嵌入式 OSGi 环境中使用 Restlet。我在捆绑的 restlet 测试的类路径中添加了 org.restlet.jar 版本 2.3.0。但它一直给我以下错误。

java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpHandler

文档说这个 jar 应该足够了,但它目前不工作。捆绑包由 Equinox 框架 启动,该框架由独立的启动器启动,稍后可在 Eclipse 环境之外使用。

我应该添加另一个 jar fie 以获得正确的服务器连接器吗?我不会使用 servlet,所以 Restlet 连接器是唯一的选择。

当我手动启动捆绑包时,我收到以下警告:

WARNING: No available server connector supports the required protocols: 'HTTP' . Please add the JAR of a matching connector to your classpath.

我已经花了很多时间来让它工作,但没有运气。提前致谢!

【问题讨论】:

    标签: java osgi restlet restlet-2.0


    【解决方案1】:

    我在here 发布的答案中找到了解决方案。

    所以包 com.sun.net.httpserver(它是 JDK 的一部分)需要暴露给 OSGi 环境。对我有用的最佳解决方案是在框架启动期间通过系统捆绑公开它,方法是将其添加到以下属性:

    org.osgi.framework.system.packages.extra = com.sun.net.httpserver
    

    如果您在使用自定义框架启动器的 OSGi 环境中使用 Restlet,添加上述解决方案将使包可用于导入。我认为他们应该在他们的文档中添加这些信息。在Eclipse中安装Restlet并使用Eclipse启动器直接在Eclipse环境中使用时不会出现此问题,因为我认为配置将自动设置。

    【讨论】:

    • 我在运行 Eclipse Equinox 的 KURA 下遇到了同样的问题,如何设置系统捆绑包的属性?
    • @sabrina2020 抱歉耽搁了。我不知道您提到的框架,但是如果您正在使用 eclipse,我看到的另一个解决方案是更改 eclipse 的首选项,以便它不会将其视为错误,但可能会发出警告。如果我没记错preference->java->compiler->errors/warning->然后在右侧你将“Depreciated and restricted API”规则从“Error”更改为“Warning”
    猜你喜欢
    • 2015-08-06
    • 2012-08-26
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多