Ограничения атрибутов 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);

Другие вопросы по тегам