【问题标题】:ClassNotFoundException While Deserializing in OSGi Bundles在 OSGi 包中反序列化时出现 ClassNotFoundException
【发布时间】:2012-03-19 15:38:12
【问题描述】:

在一个 OSGi 包(称为 net.beaconcontroller.cluster)中,我有一个 org.jgroups.blocks.ReplicatedHashMap 类型为 <Long, net.beaconcontroller.cluster.ControllerInfo>。问题是,在调度期间(即在远程端反序列化ControllerInfo)JGroups 抱怨ClassNotFoundException。 (附加堆栈跟踪。)添加

Thread.currentThread().setContextClassLoader(Cluster.class.getClassLoader())

net.beaconcontroller.cluster 包的 startUp() 方法的行没有任何效果。我可能会错过什么?

Caused by: java.lang.ClassNotFoundException: net.beaconcontroller.cluster.ControllerInfo
        at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506) ~[na:na]
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) ~[na:na]
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) ~[na:na]
        at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) ~[na:na]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_30]
        at java.lang.Class.forName0(Native Method) ~[na:1.6.0_30]
        at java.lang.Class.forName(Class.java:247) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_30]
        at java.util.HashMap.readObject(HashMap.java:1030) ~[na:1.6.0_30]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_30]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_30]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_30]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_30]
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_30]
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_30]
        at org.jgroups.blocks.ReplicatedHashMap.setState(ReplicatedHashMap.java:540) ~[na:na]
        at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.handleUpEvent(MessageDispatcher.java:497) ~[na:na]
        at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:558) ~[na:na]

【问题讨论】:

  • 您能否将 ControllerInfo 移动到单独的片段包中,将 JGroups 设置为片段主机?这样 JGroups 应该能够在反序列化期间看到 ControllerInfo 类。

标签: java osgi classnotfoundexception jgroups


【解决方案1】:

您是否尝试在捆绑包的 MANIFEST.MF 中添加:

Import-Package: net.beaconcontroller.cluster

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2017-09-02
    • 2013-06-19
    • 2011-09-12
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多