Java 在transformerFactory中设置功能\u安全\u处理是否也会更新其他安全功能?
在jdk1.6中,当我设置Java 在transformerFactory中设置功能\u安全\u处理是否也会更新其他安全功能?,java,xerces,xalan,Java,Xerces,Xalan,在jdk1.6中,当我设置 transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false) 我面临以下错误: javax.xml.transform.TransformerConfiguration异常:无法在此TransformerFactory上设置功能“”。 位于org.apache.xalan.processor.TransformerFactoryImpl.setFeature(TransformerFac
transformerFactory.setFeature(XMLConstants.ACCESS_EXTERNAL_DTD, false)
我面临以下错误:
javax.xml.transform.TransformerConfiguration异常:无法在此TransformerFactory上设置功能“”。
位于org.apache.xalan.processor.TransformerFactoryImpl.setFeature(TransformerFactoryImpl.java:418)
正如我在这里发现的:
我不能在这里做建议的更改,因为我的管理员会检查其他API冲突
根据这个链接:
您可以使用TransformerFactory.setFeature(String,boolean)
方法设置特征值。XalanJava只支持设置xmlcants.FEATURE\u SECURE\u PROCESSING
功能。对于所有其他功能,TransformerFactory会公开其值,但不能更改其状态
因此,如果使用TransormerFactory的xalan实现,我们似乎只能设置此功能
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
最后,我的问题是:
如果我们设置功能:
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
然后是另一个功能(xmlcants.ACCESS\u EXTERNAL\u DTD
)自动设置为false。从我设置的日志中,我将上述特性设置为“false”。
但是我想确定
accessExternalDTD
功能在默认情况下是否设置为false,或者安全处理功能是否设置为true。从源代码看,在更新xmlstants.feature\u secure\u processing时,其他功能似乎没有更新:
public void setFeature(String name, boolean value)
throws TransformerConfigurationException {
// feature name cannot be null
if (name == null) {
throw new NullPointerException(
XSLMessages.createMessage(
XSLTErrorResources.ER_SET_FEATURE_NULL_NAME, null));
}
// secure processing?
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
m_isSecureProcessing = value;
}
// This implementation does not support the setting of a feature other than
// the secure processing feature.
else
{
throw new TransformerConfigurationException(
XSLMessages.createMessage(
XSLTErrorResources.ER_UNSUPPORTED_FEATURE,
new Object[] {name}));
}
}
看来我需要找到另一种方法来设置这个feaure xmlstants.ACCESS\u EXTERNAL\u DTD:(在Java 8中是的。如果我们设置
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
然后属性ACCESS\u EXTERNAL\u DTD
,ACCESS\u EXTERNAL\u样式表
将设置为”
,如建议的那样
我们可以通过以下方式进行验证:
Object hasExternalDtd=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_DTD);
Object hasExternalStyle=factory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);
设置功能\u安全\u处理后
功能
如果我们没有为这两个属性设置默认值,则默认值为
all
。找到其他方法了吗?