有没有办法通过XML配置在XSLT转换器中禁用DTD验证?
我有一个客户的具体回复,我不想验证(出于商业原因)
我可以在Spring Integration中执行此操作吗?
提前致谢,
卡尔
答案 0 :(得分:0)
我找到了这个解决方案:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// stop the network loading of DTD files
factory.setValidating(false);
factory.setNamespaceAware(true);
factory.setFeature("http://xml.org/sax/features/namespaces", false);
factory.setFeature("http://xml.org/sax/features/validation", false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
(见TransformerFactory - avoiding network lookups to verify DTDs)
由于我们知道<int-xml:xslt-transformer>
支持source-factory
和result-factory
,因此只需要为它们提供onw实现,例如基于现有的DomSourceFactory
和DomResultFactory
,并在构造函数中注入该代码。
当然,您可以向DocumentBuilderFactory
和DomSourceFactory
注入DomResultFactory
,但是您应该在其{{1}中编写一些自定义FactoryBean<DocumentBuilderFactory>
来初始化DocumentBuilderFactory
}}