SpringIntegration - 禁用DTD验证

时间:2014-11-14 16:08:16

标签: java xslt spring-integration dtd

有没有办法通过XML配置在XSLT转换器中禁用DTD验证?

我有一个客户的具体回复,我不想验证(出于商业原因)

我可以在Spring Integration中执行此操作吗?

提前致谢,

卡尔

1 个答案:

答案 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-factoryresult-factory,因此只需要为它们提供onw实现,例如基于现有的DomSourceFactoryDomResultFactory,并在构造函数中注入该代码。

当然,您可以向DocumentBuilderFactoryDomSourceFactory注入DomResultFactory,但是您应该在其{{1}中编写一些自定义FactoryBean<DocumentBuilderFactory>来初始化DocumentBuilderFactory }}