【发布时间】:2017-11-04 04:28:56
【问题描述】:
我正在使用 Stax 解析器来解析一个非常大的 xml 文件,这是我编写的代码
public class XmlWrite {
public static void main(String[] args) throws
IOException,XMLStreamException {
FileWriter fw = null;
FileReader page = new FileReader("pages142");
XMLInputFactory factory = XMLInputFactory.newInstance();
//factory.setProperty(XMLConstants.FEATURE_SECURE_PROCESSING,false);
XMLEventReader eventReader = factory.createXMLEventReader(page);
boolean flag = false;
int no = 1;
while(eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
.........
此代码在小输入文件上运行良好,但对于大文件,它会给出以下错误
Exception in thread "main" javax.xml.stream.XMLStreamException:
ParseError at [row,col]:[44018907,204]
Message: JAXP00010004: The accumulated size of entities is
"50,000,001" that exceeded the "50,000,000" limit set by
"FEATURE_SECURE_PROCESSING".
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83) at XmlWrite.main(XmlWrite.java:28)
我尝试了 factory.setProperty 但这也不起作用。有什么方法可以在整个使用 jvm 的过程中禁用安全处理?
【问题讨论】:
-
我遇到了同样的问题。我找到了答案:here
-
@animeshpathak 有没有办法像这样禁用限制?我有一个文件太大,限制不够大
标签: java xml xml-parsing stax