Woodstox通过SimpleXML属性限制-如何设置它们?

时间:2018-10-18 17:01:54

标签: java xml xml-parsing woodstox

我一直试图让SimpleXML读取巨大的XML并遇到属性大小限制。

javax.xml.stream.XMLStreamException:超出最大属性大小限制(524288)     在com.ctc.wstx.sr.StreamScanner.constructLimitViolation(StreamScanner.java:2470)

我尝试使用系统属性,但似乎没有找到它。

-Djavax.xml.stream.XMLInputFactory = com.ctc.wstx.stax.WstxInputFactory -Dcom.ctc.wstx.maxAttributeSize = 10000000

如何强制Woodstox使用新的限制?

2 个答案:

答案 0 :(得分:1)

我找到了一种可行的方法。我创建了自己的XMLInputFactory,它扩展了woodstox工厂,从而改变了有问题的限制。

public class InputFactory extends WstxInputFactory {
    public InputFactory() {
        super();
        setProperty(WstxInputProperties.P_MAX_ATTRIBUTE_SIZE, Integer.MAX_VALUE);
    }
}

然后只需在main中设置系统属性。

// Force use of our custom XML input factory
    System.getProperties().put("javax.xml.stream.XMLInputFactory", "my.custom.InputFactory");           

答案 1 :(得分:0)

这个简单的代码也可以:

XMLInputFactory factory = XMLInputFactory.newFactory();
factory.setProperty(WstxInputProperties.P_MAX_ATTRIBUTE_SIZE, Integer.MAX_VALUE);