在OSGi下使用SnakeYaml?

问题描述 投票:3回答:2

SnakeYaml是否可以在OSGi框架中工作?我已经修改了MANIFEST&使其可以正确部署,但是尝试将文档加载到JavaBean对象结构中失败,出现“找不到类”异常。

谢谢。

java osgi yaml snakeyaml
2个回答
8
投票

有时,就像添加清单标头一样简单,以使jar在OSGi沙箱中发挥出色的作用。有时jars /库在OSGi的上下文中做“顽皮的”事情。黄金法则是避免使用“ Class.forName()”,因为OSGi使用类加载器,否则在单个类加载器环境中完全有效。我将源代码下拉到SnakeYaml,它们是基于Class.forName的基于bean的加载程序。

好消息是,似乎有一个构造函数CustomClassLoaderConstructor,让您使用自己的类加载器,并在创建核心Yaml解析器对象时使用它。关键是获得正确的类加载器。您将要使用在其中使用Yaml BUT的捆绑软件的类加载器,您需要确保将要创建的ANY CLASS导入到该捆绑软件中。导入将确保所有需要的对象都在OSGi创建的类加载器树中。

[See this question用于基于包创建类加载器。


0
投票

对于任何偶然发现此问题的人,snakeyaml的较新版本已经是osgi bundle。无需摆弄文件MANIFEST.MF。

您必须像这样使用CustomClassLoaderConstructor:

import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;

CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(this.getClass().getClassLoader());
Config config = new Yaml(constructor).loadAs(in, Config.class);

使用org.yaml.snakeyaml测试的代码; bundle-version =“ 1.25.0”

© www.soinside.com 2019 - 2024. All rights reserved.