Woodstox via SimpleXML attribute limits - how to set them?

1.3k Views Asked by At

I've been trying to get SimpleXML to read a huge XML and run into attribute size limit.

javax.xml.stream.XMLStreamException: Maximum attribute size limit (524288) exceeded at com.ctc.wstx.sr.StreamScanner.constructLimitViolation(StreamScanner.java:2470)

I've tried using a system property but it doesn't seem to pick it up.

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

How can I force Woodstox to use a new limit?

2

There are 2 best solutions below

0
John Baker On

I found a way that works. I created my own XMLInputFactory that extends the woodstox factory that alters the problematic limit.

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

Then just set the system property in main.

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

This simple code can work too:

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