Java 在transformerFactory中设置功能\u安全\u处理是否也会更新其他安全功能?

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

在jdk1.6中,当我设置

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

找到其他方法了吗?