【问题标题】:Disable FEATURE SECURE PROCESSING in Stax Java Parser for XML在用于 XML 的 Stax Java Parser 中禁用 FEATURE SECURE PROCESSING
【发布时间】: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


【解决方案1】:

使用此解决方法有帮助

java -DentityExpansionLimit=2147480000 -DtotalEntitySizeLimit=2147480000 -Djdk.xml.totalEntitySizeLimit=2147480000 Code_Name

【讨论】:

    【解决方案2】:

    试试

    factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,false)
    

    参考:https://docs.oracle.com/javase/tutorial/jaxp/properties/scope.html

    【讨论】:

    • 但是我试过了,还是不行。此语句在第 4 行的代码中
    • 尝试 setFeature(),而不是像您那样使用 setProperty()。
    • 它仍然无法正常工作:(,这是我收到的错误 XmlWrite.java:35: 错误:找不到符号 factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,false); ^ 符号:变量 XMLConstants 位置: 类 XmlWrite
    • 试试javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING
    • 不,它仍然无法正常工作...错误仍然相同:(... XmlWrite.java:35: 错误:找不到符号 factory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING,假);^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2015-10-26
    • 2012-03-20
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多