我使用的短笛罐子和使用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-2.9.1.jar,但仍得到相同的错误的老xercesImpl.jar。我一派,din't发现任何具体的解决方案。
请帮助,任何想法是明显的。
所以常XMLConstants.FEATURE_SECURE_PROCESSING
具有价值http://javax.xml.XMLConstants/feature/secure-processing
根据源代码here(最新为1.04),一个大的if else块检查,看看是否有什么这个值的允许的特征之一,如果没有抛出该异常。而事实上,这不是判断为合法,因此抛出异常的一个值。
按照SaxParserFactory,我们读到
所有实现必须支持javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING功能。
短笛实现解析器,但并没有SAXParser的。所以,这一切的一切,我会说短笛不支持该功能。也许我会说使用不同的XMLReader它不支持它。
为SAX2 XMLReaderFactory的足够有趣甲骨文的JDK内部的Xerces版本还没有提供这个功能的制定者。我不知道是什么,或者什么推荐的替代方案应该是。有一种解决方法是这样的:
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
XMLReader reader = spf.newSAXParser().getXMLReader();
奇怪。内部将其映射到安全管理器(com.sun.org.apache.xerces.internal.utils.XMLSecurityManager)具有不同的实体扩展限制。此外,它设置了新的属性XMLConstants.ACCESS_EXTERNAL_DTD
和XMLConstants.ACCESS_EXTERNAL_SCHEMA
到""
(外部访问)。