为什么找不到以下类

问题描述 投票:1回答:2

这是在使用IKVM的.net应用程序中使用saxon9ee.jar的情况(我们单独编译因为我们使用不同的IKVM)。

我运行set以在调试器中删除任何异常,因为我遵循快乐路径中没有异常的做法。

Saxon为以下类抛出ClassNotFoundException,但运行正常:

  • com.saxonica.ee.domino.DominoNode
  • com.saxonica.xsltextn.style.SaxonElementFactory
  • com.saxonica.ee.extfn.js.IXSLElementFactory

这是一个问题还是预期的?

更新:好的,这绝对是类加载器(IKVM)的问题。答案是IKVM Class Loader

.net saxon ikvm
2个回答
0
投票

com.saxonica.ee.domino.DominoNode - 我发现这个例外有点令人惊讶。如果你的构建包含com.saxonica.ee.domino包,那么我希望这个类的动态加载成功;如果没有那么我会期望不尝试动态加载。通过调用Configuration.registerExternalObjectModel()启动动态负载。

com.saxonica.xsltextn.style.SaxonElementFactorycom.saxonica.ee.extfn.js.IXSLElementFactory - 类似于这两个,据我所知,只有在类实际存在的情况下才会尝试动态加载。

所以我认为我们在这里看到的是一个类存在的情况,但是类的动态加载失败了。这表明类加载环境存在某种问题,作为第一步,可能值得研究为什么会出现类加载失败。

Saxon很可能在没有这些“插件”类的情况下运行,因此它们没有被加载的事实可能对你的应用程序没有问题,但它确实向我提出了类加载环境可能存在的问题。还有其他更严重的症状。


0
投票

问题是类加载器找不到类 - 即使调用和所需的类在同一个DLL中(请记住这是IKVM所以DLL,而不是JAR)。

这个原因,以及解决方案,are described in this blog entry

当我们的代码首次初始化时,我们通过添加以下调用来解决它。此代码与所有Saxon代码位于同一个DLL中(我们创建了所有代码和所有第三方JAR的单个DLL)。

// use misspelled addBootClassPathAssemby 
ikvm.runtime.Startup.addBootClassPathAssemby(System.Reflection.Assembly.GetExecutingAssembly ());
© www.soinside.com 2019 - 2024. All rights reserved.