我已经使用jdom对模式进行xml验证。主要问题是它出错了
解析时可能无法调用FWK005解析
主要原因是多个线程同时用于xerces验证。所以我得到了解决方案,我必须锁定验证。哪个不好
所以我想知道哪个xml验证器适用于多线程项目
public static HashMap<String, String> validate(String xmlString, Validator validator) {
HashMap<String, String> map = new HashMap<String, String>();
long t1 = System.currentTimeMillis();
DocumentBuilder builder = null;
try {
//obtain lock to proceed
// lock.lock();
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// Source source = new DOMSource(builder.parse(new ByteArrayInputStream(xmlString.getBytes())));
validator.validate(new StreamSource(new StringReader(xmlString)));
map.put("ISVALID", "TRUE");
logger.info("We have successfuly validated the schema");
} catch (Exception ioe) {
ioe.printStackTrace();
logger.error("NOT2 VALID STRING IS :" + xmlString);
map.put("MSG", ioe.getMessage());
// logger.error("IOException while validating the input XML", ioe);
}
logger.info(map);
long t2 = System.currentTimeMillis();
logger.info("XML VALIDATION TOOK:::" + (t2 - t1));
} catch (Exception e) {
logger.error(e);
} finally {
//release lock
// lock.unlock();
builder = null;
}
return map;
}
由于 Sunil Kumar Sahoo
答案 0 :(得分:5)
我认为任何java xml验证器都不是线程安全的。选项是:
答案 1 :(得分:0)
由于这个问题是关于多线程XML验证的...请注意java 1.6中的这个错误:javax.xml.validation.Schema is not thread safe
Schema类javadoc声称它是线程安全的,但在某些版本的java中并非如此。当您尝试同时运行两个验证时,结果是意外的验证错误。
错误报告中建议的解决方法是使用更新版本的xerces库。