使用Zeroc Ice时出现NoValueFactoryException-切片格式还是紧凑格式?

时间:2019-02-04 09:53:11

标签: ice

我正在尝试在OSGi上下文中使用Ice客户端。在非OSGi环境中运行服务器和最小示例客户端可以正常工作。使用OSGi环境中的客户端时,出现以下异常:

com.zeroc.Ice.NoValueFactoryException
    reason = "no value factory found and compact format prevents slicing (the sender should use the sliced format instead)"
    type = "::MyModule::Knowledge::CMKnowledge"

但是,我不确定100%是否OSGi运行时在这里有所作为。切片文件如下所示:

module MyModule{
    module Knowledge{
        class KnowledgePart{
            string value;
        }

        class FMKnowledge extends KnowledgePart{}
        class CMKnowledge extends KnowledgePart{}

        interface IKnowledge{
            void sendKnowledge(KnowledgePart knowledge);
            FMKnowledge getFMKnowledge();
            CMKnowledge getCMKnowledge();
        }
    }
}

在这种情况下,该异常是什么意思,我该如何解决?我已经尝试设置[“ format:sliced”]而不是隐式使用的紧凑格式。

1 个答案:

答案 0 :(得分:2)

该错误表示Ice运行时尝试加载MyModule.Knowledge.CMKnowledge类,但未能成功。您必须确保应用程序使用的类加载器可以加载MyModule.Knowledge.CMKnowledge类。

另请参阅https://doc.zeroc.com/ice/3.7/language-mappings/java-mapping/custom-class-loaders