Kettle8.1转换组件XSLT异常Content is not allowed in prolog
Kettle8.1版本,准备好正确的xml和xsl文件,再配置好如下流程,转换报错:
net.sf.saxon.trans.XPathException:org.xml.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
该问题是Kettle8.1的一个bug,网上查找了此异常的说法,可参考如下链接:
https://blog.csdn.net/zhengyangzkr/article/details/76717439
大都说是由于windows平台把utf-8 格式的文件在前边加了 EF BB BF三个字节,导致解析xml的时候报错。
接下来,查看代码对应类Xslt.java发现是转换xml文件报错:
对比查看作业-XSLT可以正常使用,故对比查看代码对应类JobEntryXSLT.java发现,其使用字节流,而转换里的XSLT使用StringReader字符流:
从作业-XSLT的实现及参考网上关于该异常的说法来看,判断问题原因是,XML文件开头代表编码的几个字节不能被字符流正确识别解析为XML文件的字符。
所以解决此问题可以按照作业组件中的XSLT的处理XML的方式,即以字节流读取XML文件,最终运行成功。