如何设置FEATURE_SECURE_PROCESSING在XMLReaderFactory?

问题描述 投票:2回答:2

我使用的短笛罐子和使用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发现任何具体的解决方案。

请帮助,任何想法是明显的。

java xmlreader saxparser
2个回答
2
投票

所以常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它不支持它。


0
投票

为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_DTDXMLConstants.ACCESS_EXTERNAL_SCHEMA""(外部访问)。

© www.soinside.com 2019 - 2024. All rights reserved.