IKVM如果在使用pdfbox.net时使用process.start运行,则找不到Provider

时间:2016-05-02 09:09:11

标签: c# pdfbox ikvm

我遇到了一个奇怪的问题。 我已经编写了一个dll(作为Navision的插件),它通过process.start()调用控制台应用程序。使用IKVM的控制台应用程序使用pdfbox.net(v1.8.4)。

如果我直接运行控制台应用程序(在visual studio中使用cmd或“start”)一切正常。 如果我通过类libary(使用单元测试(mstest)测试)或任何其他(测试)项目的process.start()启动控制台应用程序,我会得到一个例外:

  

javax.xml.parsers.FactoryConfigurationError:Provider   com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not   结果

我的process.start来自类lib:

string[] args = {pdfFilePath, zugferdFilePath};
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
    FileName = exeFile,
    Arguments = string.Join(" ", args),
    WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    ErrorDialog = true,
    RedirectStandardError = true,
    RedirectStandardOutput = true,
    UseShellExecute = false
};
Process process = Process.Start(processStartInfo);

有关例外的详细信息: 消息:

  

未找到提供商com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

来源:

  

IKVM.OpenJDK.XML.API

堆栈跟踪:

  

((java.lang.Throwable)_exception).StackTrace“bei javax.xml.parsers.DocumentBuilderFactory.newInstance()   bei Mustang.ZUGFeRDImporter.parse()在C:\ GIT \ KCorp.NAV.Zugferd \ KCorp.Nav.Zugferd.Split \ Mustang \ ZUGFeRDImport.cs:Zeile 124。   bei KCorp.Nav.Zugferd.Split.Zaumzeug.showZUGFeRD(String filepath,String xmlFilePath)在C:\ GIT \ KCorp.NAV.Zugferd \ KCorp.Nav.Zugferd.Split \ Zaumzeug.cs:Zeile 30。“

有人知道如何解决这个问题吗?

如果您需要进一步的信息,请告诉我。

提前感谢。

1 个答案:

答案 0 :(得分:1)

这是一个类加载器问题。尝试在调用工厂的行之前添加以下内容:

var s = new  com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();

这将迫使程序集加载,并且每次遇到此问题时都会为我工作。