昨天甲骨文决定暂时关闭 java.sun.com。这让我搞砸了,因为 xalan 试图验证一些 XML 但无法检索 properties.dtd。
我正在使用 xalan 2.7.1 运行一些 XSL 转换,并且我不希望它验证任何内容。所以尝试像这样加载 XSL:
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(false);
XMLReader rdr = spf.newSAXParser().getXMLReader();
Source xsl = new SAXSource(rdr, new InputSource(xslFilePath));
Templates cachedXSLT = factory.newTemplates(xsl);
Transformer transformer = cachedXSLT.newTransformer();
transformer.transform(xmlSource, result);
在 XSL 本身中,我执行以下操作:
<xsl:variable name="entry" select="document(concat($prefix, $locale_part, $suffix))/properties/entry[@key=$key]"/>
此代码检索的 XML 在顶部具有以下定义:
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="...
尽管上面的 java 代码指示解析器不验证,它仍然向 java.sun.com 发送请求。虽然 java.sun.com 不可用,但这会使转换失败并显示以下消息:
Can not load requested doc: http://java.sun.com/dtd/properties.dtd
如何让 xalan 停止尝试验证从“文档”函数加载的 XML?