powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / javax.xml.validation.Validator зависает намертво!
10 сообщений из 10, страница 1 из 1
javax.xml.validation.Validator зависает намертво!
    #37846410
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
    /**
     *
     * @param fileName - путь к XML-файлу, который необходимо проверить.
     * @param XSDschema - путь к XSD-схеме, по которой будет проводиться проверка файла.
     * @return статус валидации true или false
     */
    public Boolean validate(String fileName, String XSDschema) {
        init();
        try {
            this.fileName = fileName;
            
            TranslateErrorMasseges.getInstance();

            // 1. Поиск и создание экземпляра фабрики для языка XML Schema
            SchemaFactory factory =
                    SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

            // 2. Компиляция схемы
            // Схема загружается в объект типа java.io.File, но вы также можете использовать 
            // классы java.net.URL и javax.xml.transform.Source
            File schemaLocation = new File(XSDschema);
            Schema schema;

            schema = factory.newSchema(schemaLocation);

            // 3. Создание валидатора для схемы
            Validator validator = schema.newValidator();

            ErrorHandler lenient = new ForgivingErrorHandler();
            validator.setErrorHandler(lenient);

            String xmlString = new String();

            FileReader fr = null;
            BufferedReader in = null;
            try {
                File xmlFile = new File(fileName);
                fr = new FileReader(fileName);
                in = new BufferedReader(fr);
                char[] buf = new char[(int) xmlFile.length()];
                in.read(buf, 0, (int) xmlFile.length());
                xmlString = String.copyValueOf(buf);
                int len = xmlString.length();
                in.close();
                fr.close();
            } catch (Exception e) {
                try {
                    in.close();
                } catch (Exception ee) {
                }
                try {
                    fr.close();
                } catch (Exception ee) {
                }
            }

            // 4. Разбор проверяемого документа
            //Source source = new StreamSource(fileName);
            Source source = new StreamSource(new StringReader(xmlString));
            // 5. Валидация документа

            try {
                validator.validate(source);
            } catch (IOException ex) {
                Logger.getLogger(XMLvalidator.class.getName()).log(Level.SEVERE, null, ex);
            }

        } catch (SAXException ex) {
            return false;
        }
        return validness;
    }



У меня складывается впечатление, что javax.xml.validation.Validator - это какая-то глючная библиотека.
Я там извратился с чтением файла в память потому, что если происходит фатальная ошибка, то javax.xml.validation.Validator не закрывает файловый дескриптор и он не закрывается пока не закроется сама библиотека.
А сейчас проблема в том, что почему-то на некоторых XML он зависает намертво! Одно ядро вешается на 100% и памяти процесс java.exe жрёт 270 Мбайт.
Кто-нибудь с этим сталкивался?
Что делать?
Есть ли ещё какие-нибудь (только неглючные) библиотеки SAX-парсеров?
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846518
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы используете Java SAX API. А вот реализации у него могут быть разными. Имеет смысл скачать xerces новой версии и подключить к проекту. Проект в контейнере запускается или standalone? На какой JRE?
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846530
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПроект в контейнере запускается или standalone? На какой JRE?
Это делает EJB-модуль GlassFish'а. Поэтому такие глюки крайне неприятны - вешается сервер или сервер не закрывает файлы и ничего нельзя с ними сделать до перезапуска сервера.
JDK 1.7.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846533
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000авторПроект в контейнере запускается или standalone? На какой JRE?
Это делает EJB-модуль GlassFish'а. Поэтому такие глюки крайне неприятны - вешается сервер или сервер не закрывает файлы и ничего нельзя с ними сделать до перезапуска сервера.
JDK 1.7.Когда ззависнет - попробуйте засаспендить JVM и посмотреть, что именно повисло.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846537
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда зависает - можно сделать дамп потоков и посмотреть чем оно занимается.
Если это GlassFish, то там, скорее всего какая-то своя реализация SAX API. Надо смотреть евойные либы.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846567
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКогда ззависнет - попробуйте засаспендить JVM и посмотреть, что именно повисло.
авторКогда зависает - можно сделать дамп потоков и посмотреть чем оно занимается.
Если это GlassFish, то там, скорее всего какая-то своя реализация SAX API. Надо смотреть евойные либы.
Мне как-то не очень хочется развлекаться с этой библиотекой. Я лучше попробую Xerces вначале прикрутить.
Да, кстати, у javax.xml.validation.Validator ещё и сообщения об ошибках все не на русском.

А у Xerces есть русификация?
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846606
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такое было. Выяснилось следующее, в схеме, некоторые строковые элементы были ограничены регулярными выражениями, выражения были не тривиальны и коряво написаны, куча лишних скобок и т.д.(но по синтаксису были корректны) После их рефакторинга, зависания прекратились. Что интересно, я пробовал разные парсеры, даже написанные на С по линукс или Венду, все они либо висли, либо вылетали с ошибками.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846616
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вспомнил, зависания происходили в зависимости от строк в проверяемом xml, то есть, некоторые данные в xml проверялись по регулярному выражению без проблем, а другие, при проверке по точно такому же выражению, вешали парсер.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37846619
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenУ меня такое было. Выяснилось следующее, в схеме, некоторые строковые элементы были ограничены регулярными выражениями, выражения были не тривиальны и коряво написаны, куча лишних скобок и т.д.(но по синтаксису были корректны) После их рефакторинга, зависания прекратились. Что интересно, я пробовал разные парсеры, даже написанные на С по линукс или Венду, все они либо висли, либо вылетали с ошибками.
Круто. Не знал про такое. Если вы правы, то это легко определить по дампу потока.
...
Рейтинг: 0 / 0
javax.xml.validation.Validator зависает намертво!
    #37850416
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wessenУ меня такое было. Выяснилось следующее, в схеме, некоторые строковые элементы были ограничены регулярными выражениями, выражения были не тривиальны и коряво написаны, куча лишних скобок и т.д.(но по синтаксису были корректны) После их рефакторинга, зависания прекратились. Что интересно, я пробовал разные парсеры, даже написанные на С по линукс или Венду, все они либо висли, либо вылетали с ошибками.
Спасибо за мысль!
У меня заработало. Оказывается валидатор не вис, а просто очень-очень долго работал из-за того, что происходили дикое количество ошибок. Ограничил число ошибок для вывода и сдалал выход из валидатора. Теперь всё работает.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / javax.xml.validation.Validator зависает намертво!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]