0

OSGi 新手。我正在尝试在春季从 osgi 获得服务。代码的 Git 链接:https ://github.com/shinevs/SpringIntegrationTest 获取 ClassCastException。

java.lang.ClassCastException: com.bundle.Activator cannot be cast to com.myInterface.BundleInterface
    at com.osgi.OSGiLauncher.lambda$0(OSGiLauncher.java:39)
    at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915)
    at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834)
    at org.apache.felix.framework.EventDispatcher.run(EventDispatcher.java:1147)
    at org.apache.felix.framework.EventDispatcher.access$000(EventDispatcher.java:54)
    at org.apache.felix.framework.EventDispatcher$1.run(EventDispatcher.java:102)
    at java.lang.Thread.run(Thread.java:748)

我正在尝试从 spring 服务初始化一个 OSGi bundle jar。OSGi bundle 注册一个名为 Activator 的服务,一旦 OSGi bundle 初始化并创建了 Activator,就会尝试从 Spring 访问 Activator。

注意:OSGi bundle 是另一个模块,它是这个项目的一部分,用于测试目的。Spring App 只需要一个 OSGi 包作为 jar。

如何运行: curl http://localhost:8080/osgi

面临的问题:Spring App 在尝试访问 Activator 时,抛出 ClassCastException

这是由于 spring 和 osgi 中的不同类加载器。我试图实现片段,但这也没有用。

4

1 回答 1

0

在我看来,您正试图将类型 ( com.myInterface.BundleInterface) 从 OSGi 环境内部渗透到 Spring 环境外部。但是它BundleInterface是由 OSGi 加载器加载的,而 Spring 环境加载器不知道它。如果您已将测试包添加到 Spring Boot 环境中,那么它将具有与 OSGi 环境实例不同的类加载器,因此您会遇到强制转换失败。

我建议您避免尝试在 Spring Boot 应用程序中使用 OSGi 环境。我只看到那个方向的痛苦和苦难。

于 2022-02-08T19:21:20.780 回答