Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / javax.xml.validation.Validator зависает намертво! / 10 сообщений из 10, страница 1 из 1
20.06.2012, 14:15:46
    #37846410
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
Код: 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
20.06.2012, 14:49:56
    #37846518
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
Вы используете Java SAX API. А вот реализации у него могут быть разными. Имеет смысл скачать xerces новой версии и подключить к проекту. Проект в контейнере запускается или standalone? На какой JRE?
...
Рейтинг: 0 / 0
20.06.2012, 14:53:00
    #37846530
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
авторПроект в контейнере запускается или standalone? На какой JRE?
Это делает EJB-модуль GlassFish'а. Поэтому такие глюки крайне неприятны - вешается сервер или сервер не закрывает файлы и ничего нельзя с ними сделать до перезапуска сервера.
JDK 1.7.
...
Рейтинг: 0 / 0
20.06.2012, 14:55:13
    #37846533
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
Niky4000авторПроект в контейнере запускается или standalone? На какой JRE?
Это делает EJB-модуль GlassFish'а. Поэтому такие глюки крайне неприятны - вешается сервер или сервер не закрывает файлы и ничего нельзя с ними сделать до перезапуска сервера.
JDK 1.7.Когда ззависнет - попробуйте засаспендить JVM и посмотреть, что именно повисло.
...
Рейтинг: 0 / 0
20.06.2012, 14:55:44
    #37846537
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
Когда зависает - можно сделать дамп потоков и посмотреть чем оно занимается.
Если это GlassFish, то там, скорее всего какая-то своя реализация SAX API. Надо смотреть евойные либы.
...
Рейтинг: 0 / 0
20.06.2012, 15:06:37
    #37846567
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
javax.xml.validation.Validator зависает намертво!
авторКогда ззависнет - попробуйте засаспендить JVM и посмотреть, что именно повисло.
авторКогда зависает - можно сделать дамп потоков и посмотреть чем оно занимается.
Если это GlassFish, то там, скорее всего какая-то своя реализация SAX API. Надо смотреть евойные либы.
Мне как-то не очень хочется развлекаться с этой библиотекой. Я лучше попробую Xerces вначале прикрутить.
Да, кстати, у javax.xml.validation.Validator ещё и сообщения об ошибках все не на русском.

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


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