【问题标题】:Accessing resource from osgi bundle: bundle scheme in the URL lead to a malformed exception从 osgi 包访问资源:URL 中的包方案导致格式错误的异常
【发布时间】:2017-01-28 00:27:55
【问题描述】:

问题

有没有办法从其构造函数构建一个 java.net.URL 对象,并在 osgi 上下文中使用“bundle”作为方案?

示例

URL url = new URL("bundle://<bundle-id>/path/file.txt");
InputStream in = url.openStream();
...

当流打开时,此代码会导致格式错误的异常(未知协议)。不知道osgi平台如何注册新的scheme到java.net.URL

背景和理想的解决方案

感谢配置管理员,我想配置一项服务。此配置包含设置文件路径的属性。我希望消费者能够将文件存储在他想要的位置(文件系统、包内甚至互联网)。

前面的例子可能很棒,因为代码很简单,消费者可以提供以下形式的路径:“bundle:///path/file.txt”、“file:///path/file.txt”、 “http:///path/file.tx”,但不幸的是它不起作用。

【问题讨论】:

    标签: java url resources osgi protocols


    【解决方案1】:

    没有。只有框架可以构建这些 URL。您可以使用 Bundle 对象返回包中内容的 URL。

    【讨论】:

    • 好的,所以没有选择存在外部依赖。你知道我可以使用哪种方法打开通用 URL 吗?
    • 更具体地说,是否有来自 OSGI 框架的标准方法可以接受像“bundle:///path/file.txt”或“file:///path/file.txt”这样的字符串。 txt" 并返回一个有效的 java.net.URL 对象?
    • 您不能使用新的 URL("bundle:...")。捆绑协议处理程序未安装在 JVM 中。它是框架私有的。如果您知道包中资源的路径,则可以调用 Bundle.getResource("/path/file.txt") 或 Bundle.getEntry("/path/file.txt") 取决于您是否要使用包的类加载器来查找资源或只是在包中查找。
    猜你喜欢
    • 2011-11-25
    • 2011-04-01
    • 1970-01-01
    • 2017-06-08
    • 2012-09-13
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多