какой валидатор xml отлично подойдет для многопоточного проекта - PullRequest
7 голосов
/ 19 апреля 2010

Я использовал 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;
}

Спасибо Сунил Кумар Саху

Ответы [ 2 ]

5 голосов
/ 02 мая 2010

Я не думаю, что какой-либо из валидаторов Java XML безопасен для потоков. Варианты:

  1. Создайте новый экземпляр каждый раз, когда вам нужно проверить
  2. Создайте пул валидаторов, которые вы извлекаете из
  3. Используйте ThreadLocal для кэширования валидаторов
0 голосов
/ 16 октября 2012

Поскольку этот вопрос касается многопоточной проверки XML ... обратите внимание на эту ошибку в Java 1.6: javax.xml.validation.Schema не является поточно-ориентированной

Класс Schema javadoc утверждает, что он потокобезопасен, но это было не так в некоторых версиях java. В результате неожиданные ошибки проверки при попытке запустить две проверки одновременно.

Обходной путь, предложенный в отчете об ошибке, заключается в использовании более новой версии библиотеки xerces.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...