Digester digester = DigesterLoader.createDigester(new InputSource(is)); digester.setValidating(true); digester.setSchema(schemaPath); digester.parse(new StringReader(xml));
こんな風に書いて、正常にXMLからオブジェクトを作ることには成功したんだけど、わざと入力XMLを間違った書式にしてみても全然エラーが帰ってこなかった。
グーグルのおっさんに聞いてみたら、Digester/FAQにこんなのが。
訳すとおそらくこんな感じ
Why doesn't Digester throw SAXParseException when processing bad XML?
http://wiki.apache.org/commons/Digester/FAQ
The Digester class extends org.xml.sax.helpers.DefaultHandler, and the default implementation it inherits from there is to completely ignore errors reported during parsing.
You need to implement your own subclass of org.xml.sax.ErrorHandlerMyErrorHandler eh = new MyErrorHandler(); digester.setErrorHandler(eh);
「なんでDigesterは変なXML処理したときに、SAXParseExceptionを投げてくれやがらないんですかー?」
「デフォルトは構文解析エラーを無視する仕様だし。投げて欲しかったらorg.xml.sax.ErrorHandlerのサブクラスを実装してよね。」
おとなしく実装して、setErrorHandlerを書いて解決。