Java 如何在XMLReaderFactory中设置功能\u安全\u处理?

Java 如何在XMLReaderFactory中设置功能\u安全\u处理?,java,xmlreader,saxparser,Java,Xmlreader,Saxparser,我正在使用Piccolo jar并使用XMLReaderFactory创建XML读取器。 我需要设置安全处理功能,因此我这样做 xmlReader=XMLReaderFactory.createXMLReader(“com.bluecast.xml.Piccolo”); setFeature(xmlstants.FEATURE\u SECURE\u PROCESSING,true) 但这是一个错误 org.xml.sax.SAXNotRecognizedException:http://java

我正在使用Piccolo jar并使用XMLReaderFactory创建XML读取器。 我需要设置安全处理功能,因此我这样做

xmlReader=XMLReaderFactory.createXMLReader(“com.bluecast.xml.Piccolo”);
setFeature(xmlstants.FEATURE\u SECURE\u PROCESSING,true)

但这是一个错误
org.xml.sax.SAXNotRecognizedException:http://javax.xml.XMLConstants/feature/secure-processing
位于com.bluecast.xml.Piccolo.setFeature(Piccolo.java:937)

我有一个旧的xercesImpl.jar,它已被xercesImpl-2.9.1.jar替换,但仍然得到相同的错误。我在谷歌上搜索,没有找到任何具体的解决方案


请帮助,任何想法都是值得欣赏的。

因此常量
xmlcontents.FEATURE\u SECURE\u PROCESSING
有价值
http://javax.xml.XMLConstants/feature/secure-processing

根据源代码(最新版本为1.04),一个较大的if-else块检查此值是否为允许的特性之一,如果不是,则抛出此异常。事实上,它不是被判定为合法的价值之一,因此引发了例外

根据,我们阅读

所有实现都需要支持 javax.xml.xmlstants.FEATURE\u SECURE\u处理功能


Piccolo实现了解析器,而不是SaxParser。总之,我想说短笛不支持这个功能。也许我会说使用另一个支持它的XMLReader。

有趣的是,Oracle JDK内部Xerces版本的XMLReaderFactory for SAX2也不提供此功能设置器。我不确定是什么,或者推荐的替代方案应该是什么。有这样一种解决方法:

    SAXParserFactory spf = SAXParserFactory.newInstance();
    spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
    XMLReader reader = spf.newSAXParser().getXMLReader();
奇怪。在内部,它映射到具有不同实体扩展限制的安全管理器(com.sun.org.apache.xerces.internal.utils.XMLSecurityManager)。此外,它还将新属性
xmlstants.ACCESS\u EXTERNAL\u DTD
xmlstants.ACCESS\u EXTERNAL\u SCHEMA
设置为
(无外部访问)