我需要在 OSGi 包中公开基于 RMI 的系统。RMI 客户端“捆绑包”是一个 jar,我使用 bnd 工具将其转换为 OSGi 捆绑包(我无法访问源代码),至少在 eclipse 中一切似乎都很好,但是当我尝试连接到RMI 服务器,抛出 ClassCastException,很可能是因为 OSGi 和 RMI 对 ClassLoader 的使用很有趣。
我该如何解决这个问题?也许将 RMI 客户端 jar 用作“系统”捆绑包?
这是堆栈跟踪:
Blipnet OSGi 服务正在启动... com.blipsystems.blipnet.api.blipserver.BlipServerConnectionException:连接到服务器时出现问题 在 com.blipsystems.blipnet.api.core.blipserver.BlipServerConnectionAdapter.(未知来源) 在 com.blipsystems.blipnet.api.core.blipserver.BlipServerConnectionAdapter.(未知来源) 在 com.blipsystems.blipnet.api.blipserver.BlipServer.getConnection(未知来源) 在 dk.itu.jingling.blipnetosgi.BlipnetConnectionService.setup(BlipnetConnectionService.java:28) 在 dk.itu.jingling.blipnetosgi.BlipnetConnectionService.(BlipnetConnectionService.java:22) 在 dk.itu.jingling.blipnetosgi.Activator.start(Activator.java:32) 在 org.apache.felix.framework.util.SecureAction$Actions.run(SecureAction.java:1235) 在 java.security.AccessController.doPrivileged(本机方法) 在 org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:658) 在 org.apache.felix.framework.Felix.activateBundle(Felix.java:1699) 在 org.apache.felix.framework.Felix.startBundle(Felix.java:1621) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:890) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:877) 在 org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.java:819) 在 org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.java:805) 在 org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:798) 在 org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:299) 引起:java.lang.ClassCastException:com.blipsystems.blipnet.blipserver.cms.NewApiHandler_Stub 无法转换为 com.blipsystems.blipnet.api.core.blipserver.RemoteBlipServerConnection