aws sdkでやってるXmlResponsesSaxParser

https://github.com/amazonwebservices/aws-sdk-for-java/blob/master/src/main/java/com/amazonaws/services/s3/model/transform/XmlResponsesSaxParser.java#L102

    public XmlResponsesSaxParser() throws AmazonClientException {
        // Ensure we can load the XML Reader.
        try {
            xr = XMLReaderFactory.createXMLReader();
        } catch (SAXException e) {
            // oops, lets try doing this (needed in 1.4)
            System.setProperty("org.xml.sax.driver", "org.apache.crimson.parser.XMLReaderImpl");
            try {
                // Try once more...
                xr = XMLReaderFactory.createXMLReader();
            } catch (SAXException e2) {
                throw new AmazonClientException("Couldn't initialize a sax driver for the XMLReader");
            }
        }
    }

判別手順

  • System.setPropertyガセットされている前提でXMLReaderFactory.createXMLReader();を実施
  • だめならorg.apache.crimson.parser.XMLReaderImplを使ってみようか・・・

という順番で判定しているようです。

古いバージョンでは org.apache.crimson.parser.XMLReaderImpl でパースするのを試してうまく行けばラッキーという感じで、JavaやTomcatのバージョンを上げて動かなくなった場合、org.apache.crimson.parser.XMLReaderImplは古いからもう使えないよ・・・ということになって明示的に指定する必要がありそうです。