哪个xml验证器可以完美地用于多线程项目

时间:2010-04-19 07:20:01

标签: java xml schema

我已经使用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

2 个答案:

答案 0 :(得分:5)

我认为任何java xml验证器都不是线程安全的。选项是:

  1. 每次需要验证时创建一个新实例
  2. 创建一个由
  3. 提取的验证程序池
  4. 使用ThreadLocal缓存验证程序

答案 1 :(得分:0)

由于这个问题是关于多线程XML验证的...请注意java 1.6中的这个错误:javax.xml.validation.Schema is not thread safe

Schema类javadoc声称它是线程安全的,但在某些版本的java中并非如此。当您尝试同时运行两个验证时,结果是意外的验证错误。

错误报告中建议的解决方法是使用更新版本的xerces库。