無いなら作ろう(その3)
J2SE6のXMLInputFactoryの参照実装はcom.sun.xml.internal.stream.XMLInputFactoryImplだが、この実装はXML文書のバリデーションには対応していないようだ。実際、XMLInputFactoryで設定できる属性であるjavax.xml.stream.isValidatingをtrueにすると、例外が発生する。
final XMLInputFactory factory = XMLInputFactory.newInstance(); factory.setProperty(XMLInputFactory.IS_VALIDATING, true); 実行結果 .... java.lang.IllegalArgumentException: true value of isValidating not supported at com.sun.org.apache.xerces.internal.impl.PropertyManager.setProperty(PropertyManager.java:150) at com.sun.xml.internal.stream.XMLInputFactoryImpl.setProperty(XMLInputFactoryImpl.java:257)
取りあえず現時点ではバリデーションが重要な処理では無いので構わないのだがちょっとショックだった。
StAXパーサの実装はSun Java Streaming XML Parser(SJSXP)と呼ばれるが、そのロードマップでは将来的にはDTDのバリデーションもサポートされるようなので、ゆっくりと待とうと思う。
SJSXP RoadMap
Going forward, XML 1.1 and DTD Validation support will be added to SJSXP. 〜http://java.sun.com/performance/reference/whitepapers/StAX-1_0.pdf(SunのStAXに関するホワイトペーパより)