IKVM 在使用 pdfbox.net 时如果 运行 和 process.start 找不到提供者
IKVM Does not found Provider if run with process.start while using pdfbox.net
我遇到了一个奇怪的问题。
我已经编写了一个 dll(作为 Navision 的插件),它通过 process.start() 调用控制台应用程序。使用IKVM的控制台应用程序使用 pdfbox.net (v1.8.4).
如果我直接 运行 控制台应用程序(在 visual studio 中使用 cmd 或 "start")一切正常。
如果我从 class 库(使用单元测试 (mstest) 测试)或任何其他(测试-)项目通过 process.start() 启动控制台应用程序,我得到一个异常:
javax.xml.parsers.FactoryConfigurationError: Provider
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not
found
我的 process.start 来自 class 库:
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);
异常详情:
留言:
Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found
来源:
IKVM.OpenJDK.XML.API
堆栈跟踪:
((java.lang.Throwable)_exception).StackTrace " bei javax.xml.parsers.DocumentBuilderFactory.newInstance()
bei Mustang.ZUGFeRDImporter.parse() in 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) in C:\GIT\KCorp.NAV.Zugferd\KCorp.Nav.Zugferd.Split\Zaumzeug.cs:Zeile 30."
有人知道如何解决这个问题吗?
如果您需要更多信息,请告诉我。
提前致谢。
这是一个类加载器问题。尝试在调用工厂的行之前添加以下内容:
var s = new com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();
这将强制加载程序集,并且在我每次遇到此问题时都对我有用。
我遇到了一个奇怪的问题。 我已经编写了一个 dll(作为 Navision 的插件),它通过 process.start() 调用控制台应用程序。使用IKVM的控制台应用程序使用 pdfbox.net (v1.8.4).
如果我直接 运行 控制台应用程序(在 visual studio 中使用 cmd 或 "start")一切正常。 如果我从 class 库(使用单元测试 (mstest) 测试)或任何其他(测试-)项目通过 process.start() 启动控制台应用程序,我得到一个异常:
javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found
我的 process.start 来自 class 库:
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);
异常详情: 留言:
Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found
来源:
IKVM.OpenJDK.XML.API
堆栈跟踪:
((java.lang.Throwable)_exception).StackTrace " bei javax.xml.parsers.DocumentBuilderFactory.newInstance() bei Mustang.ZUGFeRDImporter.parse() in 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) in C:\GIT\KCorp.NAV.Zugferd\KCorp.Nav.Zugferd.Split\Zaumzeug.cs:Zeile 30."
有人知道如何解决这个问题吗?
如果您需要更多信息,请告诉我。
提前致谢。
这是一个类加载器问题。尝试在调用工厂的行之前添加以下内容:
var s = new com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();
这将强制加载程序集,并且在我每次遇到此问题时都对我有用。