Java JRE に存在する XML バリデーターが JRE 1.6u24 で非常に遅くなるという問題が発生し、これは最新の更新にも存在します。
1000 個の XML を検証するには、次の作業が必要です。
バージョン <= 1.6u23 では約 1.4 秒。バージョン >= 1.6u24 の場合、約 15.2 秒
これは10倍遅いです!誰かがすでに問題を見つけていないか検索しようとしましたが、何も見つかりません。
もちろん、woodstox のような別のライブラリを使用して回避することもできますが、純粋な JRE を優先したいと思います。改善が行われずにこれが長い間続くとは信じられません...
テストするコードは次のようになります。
public static void main(String[] args) throws XMLStreamException, SAXException, IOException, ParserConfigurationException {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new Source[] {
new StreamSource(new File("schema1.xsd")),
new StreamSource(new File("schema2.xsd")) });
Validator validator = schema.newValidator();
XMLInputFactory staxFactory = XMLInputFactory.newInstance();
String xml = FileUtils.readFileToString(new File("to_validate.xml"), "UTF-8");
Date start = new Date();
for (int i = 0; i < 1000; i++) {
XMLStreamReader xmlr = staxFactory.createXMLStreamReader(new StringReader(xml));
StAXSource ss = new StAXSource(xmlr);
validator.validate(ss);
}
Date end = new Date();
System.out.println("seconds needed: " + (end.getTime() - start.getTime()) / 1000f);
}