net.sf.saxon.s9api.SaxonApiException: XML 解析器处理 null: null 报



我有java代码来使用xslt转换xml,但是当我运行它时,它低于异常-

cationContext@1698c449: startup date [Tue Jun 30 15:10:33 IST 2020]; root of context hierarchy
2020-06-30 15:10:36.441  INFO 23000 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
Error
I/O error reported by XML parser processing null: null
javax.xml.transform.TransformerConfigurationException: net.sf.saxon.s9api.SaxonApiException: I/O error reported by XML parser processing null: null
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(SaxonTransformerFactory.java:152)
at com.manh.xml2json.XsltTester.xmlToJsonUsingXslSaxon(XsltTester.java:116)
at com.manh.xml2json.XsltTester.run(XsltTester.java:55)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:723)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:713)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:703)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:304)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.manh.xml2json.XsltTester.main(XsltTester.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: net.sf.saxon.s9api.SaxonApiException: I/O error reported by XML parser processing null: null

这是我的java代码-

private void xmlToJsonUsingXslSaxon(String xmlFileName, String xslFileName, String outFileName){
Transformer transformer;
Templates templates;
try {
templates = new net.sf.saxon.BasicTransformerFactory().newTemplates(
new StreamSource(XsltTester.class.getClassLoader()
.getResourceAsStream(xslFileName)));
transformer = templates.newTransformer();
transformer.transform(new StreamSource(new File(xmlFileName)), new StreamResult(new File(outFileName)));

} catch (Exception e) {
e.printStackTrace();
}
}

}

注意- 我正在使用以下命令执行 jar 来运行这个 java 程序-

java -jar ./libs/xslt-tester-1.0-SNAPSHOT.jar --mode=xsl --infile=input.xml --outfile=output.json --xsl=./xslt/myxslt.xsl

更改后,如下所示对我有用。

private void transformXmlUsingXsl(String xmlFileName, String xslFileName, String outFileName){
//TransformerFactory transformerFactory = TransformerFactory.newInstance();
TransformerFactory transformerFactory = new TransformerFactoryImpl();
Transformer transformer;
try {
transformer = transformerFactory.newTransformer(new StreamSource(new File(xslFileName)));
transformer.transform(new StreamSource(new File(xmlFileName)), new StreamResult(new File(outFileName)));
} catch (Exception e) {
e.printStackTrace();
}
return;
}

如果找不到资源,ClassLoader.getResourceAsStream()返回 null,这就是堆栈跟踪建议这里发生的情况。

最新更新