请看一下 TransformerFactoryImpl 类中getAssociatedStylesheet(Source source, String media, String title, String charset) throws TransformerConfigurationException 的代码:
上述函数的定义忽略了我通过源参数(本质上是一个 SAXSource 对象)作为参数传入的 XMLReader。上面的函数是在创建一个新的 SAXParserFactory 对象之后创建一个新的 XMLReader。因此,我们面临的问题是,在解析输入 XML 文件时,它继续解析 DOCTYPE 部分和通过 Public ID 和 System ID 指定的外部 DTD。现在,由于我们的 XMLReader 不用于解析 XML 文件,因此不使用向 reader 注册的 EntityResolver,因此外部 DTD 未解析,因此 getAssociatedStylesheet 函数失败并出现异常。
但是,如果您查看其他函数public Templates newTemplates(Source source) throws TransformerConfigurationException in TransformerFactoryImpl class。此函数专门检查传入的源参数是否为 SAXSource,如果是,则如果 XMLReader 存在于源中,则它不会创建新的 XMLReader 对象。
这是一个错误吗?有什么想法吗?
XalanJ 版本:2.7.1 源文件路径:src\org\apache\xalan\processor\TransformerFactoryImpl.java
谢谢!苛刻的 Gupta Adobe 系统