【问题标题】:net.sf.saxon.s9api.SaxonApiException: I/O error reported by XML parser processing null: nullnet.sf.saxon.s9api.SaxonApiException: XML 解析器处理报的 I/O 错误 null: null
【发布时间】:2020-06-30 10:40:46
【问题描述】:

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

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

【问题讨论】:

    标签: xml xslt xpath saxon


    【解决方案1】:

    如下更改后对我有用。

    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;
        }
    

    【讨论】:

      【解决方案2】:

      ClassLoader.getResourceAsStream() 如果找不到资源,则返回 null,这就是堆栈跟踪所暗示的情况。

      【讨论】:

      • 我通过更改 TransformerFactory transformerFactory = new TransformerFactoryImpl(); 解决了这个问题。
      • 我很难理解为什么这样可以解决问题。我怀疑你也改变了其他东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 2011-03-11
      • 2018-05-20
      • 1970-01-01
      • 2015-01-12
      • 2013-11-03
      相关资源
      最近更新 更多