Ограничения атрибутов Woodstox через SimpleXML - как их установить?
Я пытался заставить 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 ответа
Я нашел способ, который работает. Я создал свой собственный 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");
Правильно, но этот простой код тоже может работать
XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty(WstxInputProperties.P_MAX_ATTRIBUTE_SIZE, Integer.MAX_VALUE);