尝试使用 sonarqube 中给出的修复程序。
*TransformerFactory tfactory = TransformerFactory.newInstance();
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
tfactory.setAttribute(javax.xml.XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
return tfactory;*
但我在 setAttribute 上遇到运行时异常:“java.lang.IllegalArgumentException:未知配置属性http://javax.xml.XMLConstants/property/accessExternalDTD”
这似乎是因为使用 [9.7] 的 saxon jar 版本中的错误。它在 saxon 10.3 上运行良好。有关此错误,请参阅https://saxonica.plan.io/issues/4729。
以下是我的问题:
有没有办法让它在我现有的撒克逊版本上工作(不升级到 10.x)。尝试使用 transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true) 但 sonarqube 不满意,因为它期望上述修复。
如果升级到 10.x 是唯一的方法,那么下面是我面临的挑战:
我正在为某些业务逻辑覆盖 TraceListener 中的方法。但是方法签名在最新版本上发生了变化,如下所示:
类 - net.sf.saxon.lib.TraceListener
Saxon 9.7 -> public void enter(InstructionInfo 指令,XPathContext 上下文)
Saxon 10.x -> public void enter(可跟踪指令,java.util.Map<java.lang.String,java.lang.Object> 属性,XPathContext 上下文)
我目前的代码:
*@Override public void enter(InstructionInfo instruction, XPathContext context) { int data = instruction.getConstructType(); if ((data == 155) || (data == 200)) { .......logic...... } }*
我的新代码将是:
*@Override
public void enter(Traceable instruction,
java.util.Map<java.lang.String,java.lang.Object> properties, XPathContext context){
--> what to use here for getConstructType()
if ((data == 155) || (data == 200)) {
.......logic......
}
}*
所以问题是 10.x jar 在其 Traceable 类或 InstructionInfo 类中没有 getConstructType() 方法。如何在 10.x 版本中使用 getConstructType()?
PS:如果第一个问题得到回答,那将非常有帮助,即)如果我能够用我当前版本的 jar 来解决,因为新版本需要测试整个项目的所有功能:(希望有人能帮助我,谢谢进步。