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

问题描述 投票:0回答:3

我一直在尝试让 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 使用新的限制?

java xml xml-parsing woodstox
3个回答
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");           

0
投票

这个简单的代码也可以工作:

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

0
投票

我遇到这个问题是因为我对 axis2 也有同样的问题,它使用 XML 解析中的 axiom,而 axiom 使用 woodstox 进行 Stax。

我想可以通过将以下文件上传到我的 tomcat 安装来修复它 ${CATALINA_HOME}/webapps/axis2/WEB-INF/classes/XMLInputFactory.properties 内容如下

com.ctc.wstx.maxAttributeSize= 2147483647

我已经根据关于如何覆盖默认 woodstox 属性的 axiom DOC 完成了此操作 https://ws.apache.org/axiom/userguide/ch04.html#factory.properties

希望有用

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