junit 如何修复Sonar问题“禁止在XML解析中访问外部实体”

rqdpfwrv  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(1080)

据我所知,为了摆脱声纳问题“禁止访问XML解析中的外部实体”,我们需要有以下代码

TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

但是当我这样做的时候,调用这段代码的JUnits失败了
读取架构文档“myschema.xsd”失败,因为accessExternalSchema属性设置的限制不允许访问“file”。
那么我们如何解决这个问题呢?如果我们解决了声纳问题,我们的Junit就失败了。
我也试着inistiasing工厂像下面,但没有变化的错误

TransformerFactory transformerFactory = new com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl();
j2cgzkjk

j2cgzkjk1#

您可以使用 newDefaultInstance() 方法创建一个新的 Transformer 对象,该对象未被sonar标记。如下所示:

TransformerFactory transformerFactory = TransformerFactory.newDefaultInstance();
    transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
    transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

这两个方法之间的主要区别是 newDefaultInstance() 返回默认的 TransformerFactory 示例,而 newInstance() 允许您为 TransformerFactory 指定特定的实现类。
换句话说,newDefaultInstance() 返回正在使用的Java运行时环境(JRE)提供的 TransformerFactory 的默认实现的示例。

相关问题