我们遇到了一个问题,即 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);
}