我正在使用Piccolo jar并使用XMLReaderFactory创建XML阅读器。 我需要设置安全处理功能,因此我这样做了,
xmlReader = XMLReaderFactory.createXMLReader("com.bluecast.xml.Piccolo");
xmlReader.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
但这是错误
org.xml.sax.SAXNotRecognizedException: http://javax.xml.XMLConstants/feature/secure-processing
at com.bluecast.xml.Piccolo.setFeature(Piccolo.java:937)
我有一个旧的xercesImpl.jar,它已被xercesImpl-2.9.1.jar取代但仍然得到相同的错误。我用谷歌搜索,没有找到任何具体的解决方案。
请帮助,任何想法都很明显。
答案 0 :(得分:2)
因此常量XMLConstants.FEATURE_SECURE_PROCESSING
的值为http://javax.xml.XMLConstants/feature/secure-processing
根据源代码here(最新版本为1.04),一个if if else块会检查该值是否为允许的功能之一,如果不是则抛出此异常。事实上,它不是被认为是合法的价值观之一,因此抛出异常。
根据SaxParserFactory,我们阅读了
所有实现都需要支持 javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING功能。
Piccolo实现了Parser,而不是SaxParser。总而言之,我会说Piccolo不支持该功能。也许我会说使用另一个支持它的XMLReader。
答案 1 :(得分:0)
有趣的是,用于SAX2的Oracle JDK内部Xerces版本的XMLReaderFactory也不提供此功能设置器。我不确定是什么,或者推荐的替代方案应该是什么。有这样的解决方法:
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
XMLReader reader = spf.newSAXParser().getXMLReader();
奇怪。在内部,它映射到具有不同实体扩展限制的 security-manager (com.sun.org.apache.xerces.internal.utils.XMLSecurityManager)。此外,它还将新属性XMLConstants.ACCESS_EXTERNAL_DTD
和XMLConstants.ACCESS_EXTERNAL_SCHEMA
设置为""
(无外部访问权限)。