有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在OSGi下使用SnakeYaml的java?

SnakeYaml是否在OSGi框架内工作?我已经修改了舱单&;这样,它就可以正确部署,但尝试将文档加载到JavaBean对象结构中失败,出现“未找到类”异常

谢谢


共 (2) 个答案

  1. # 1 楼答案

    对于任何偶然发现这一点的人来说,snakeyaml的新版本已经是一个osgi包了。无需修改文件清单。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测试代码。亚马尔。蛇毒;捆绑版本=“1.25.0”

  2. # 2 楼答案

    有时,它就像添加清单头一样简单,以使jar在OSGi沙箱中发挥良好的作用。有时,JAR/库在OSGi的上下文中做一些“顽皮”的事情。由于OSGi使用类加载器的方式,黄金法则是避免使用“Class.forName()”,否则在单个类加载器环境中完全有效。我下载了SnakeYaml的源代码,它们是基于bean的加载器,利用了类。forName

    好消息是,似乎有一个构造函数CustomClassLoaderConstructor,让您使用自己的类加载器,在创建核心Yaml解析器对象时使用它。关键是获得正确的类装入器。您需要使用使用Yaml的包的类加载器,但需要确保将要创建的任何类都导入到该包中。导入将确保所有需要的对象都位于OSGi创建的类加载器树中

    See this questionfor基于bundle创建了一个类加载器