|
|
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Вот вопрос возник. Есть желание заменить рукописный код загрузки данных из XML DOM самописанным кодом на что-нибудь более эффективное. В текущем понимании для этого неплохо бы использовать Apache Digester. Вот одно смущает - библиотека относительно неновая и, допускаю, есть более интересные альтернативы. Посоветуйте, пожалуйста, другие варианты, если есть. P.s. для генерации XML используется Velocity, так что интересен только парсинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 17:54:22 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Если неизвестен размер XML-файла и не сильно критично время, то надо смотреть только в сторону SAX. А ручками сделать структуру и обработчик несложно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:09:06 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
mikkriВот вопрос возник. Есть желание заменить рукописный код загрузки данных из XML DOM самописанным кодом на что-нибудь более эффективное. В текущем понимании для этого неплохо бы использовать Apache Digester. Вот одно смущает - библиотека относительно неновая и, допускаю, есть более интересные альтернативы. Посоветуйте, пожалуйста, другие варианты, если есть. Apache Digester мой самый любимый opensource проект. Эффективнее только сериализаторы, но там, как понимаешь, формат XML трудно контролировать. mikkriP.s. для генерации XML используется Velocity, так что интересен только парсинг. ИМХО, не самое удачное решение. Я когда-то тоже склонялся к этой связке (Digester/Velocity). И если digester себя более чем оправдал, то вариант с Velocity, вообще оказался паршивым. Минусы были обнаружены следующие. 1) Шаблон получался не красивый и сложно читаемый. 2) Красивое форматирование шаблона не очень-то совпадает с красивым форматированием XML результата. Приходилось выбирать между ними. 3) Надобность энкодить строки, привела к появлению кучи вызовов утилитного метода в шаблоне. Подозреваю что можно было сделать лучше, но код писал не я. Ты кстати как эту проблему решил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:13:00 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
IDVsbruckЕсли неизвестен размер XML-файла и не сильно критично время, то надо смотреть только в сторону SAX. А ручками сделать структуру и обработчик несложно ... А Вы Digester в глаза не видели, надо полагать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:13:53 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Размер файлов небольшой, но время относительно критично. Но в данный момент используется Electric XML парсер, который фактически реализует самодельную DOM-модель, и его скорость устраивает. Digester, насколько я понял из описания, работает как интеллектуальная обертка поверх SAX, так что производительность должна быть неплохой. Что хочется: 1) избавиться от коммерческого парсера 2) упростить труд программиста 3) повысить скорость парсинга ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:14:07 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Blazkowicz3) Надобность энкодить строки, привела к появлению кучи вызовов утилитного метода в шаблоне. Подозреваю что можно было сделать лучше, но код писал не я. Ты кстати как эту проблему решил? Я пока никак, даже не видел код, который это делает. Сейчас меня интересует чтение XML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:16:11 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Олег Гапон JAXB Нет, однозначно. Кодогенерация нам не нужна в данном случае. Да и некоторую гибкость стоит сохранить, чтобы парсер не падал от добавления какого-нибудь служебного атрибута или элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:24:44 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
дык..так не генерируйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:26:13 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
mikkriРазмер файлов небольшой, но время относительно критично. Но в данный момент используется Electric XML парсер, который фактически реализует самодельную DOM-модель, и его скорость устраивает. Есть мнение, что на небольших файлах DOM ничуть не проигрывает SAX. Так что рекомендую взять максимально большой и среднего размера файлы и протестить их парсинг. mikkriDigester, насколько я понял из описания, работает как интеллектуальная обертка поверх SAX, так что производительность должна быть неплохой. Вот тут-то есть о чем поспорить. На файлах ближе к 1Мб и выше, скорость будет супер. Но вот если размер XML колеблется в районе 10-30Кб, я бы все же потестировал прежде чем менять. Мне кажется Digester может просесть на маленьких XML из-за необходимости искать по правилам. Если боротся за performance надо делать голый SAX или попрбовать StAX. Опять же все надо тестировать, на небольших файлах, результаты могут быть сюрпризом. mikkri1) избавиться от коммерческого парсера Какие плюсы заявляют его авторы? mikkri2) упростить труд программиста Тут конечно Дайджестеру равных нет. Но к сожалению он не панацея. mikkri3) повысить скорость парсинга Рекомендую поискать сравнительные анализы, их в гугле полно. На rsdn тоже проскакивали. Потестировать самостоятельно на файлах нужного размера. Посмотреть JiBX - он по маппингу генерит методы на уровне байт кода. По идее это даёт наибольший перфоманс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:32:41 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Йа использовал Castor. Вполне устроил как для парсинга, так и для рендеринга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:36:18 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Blazkowicz mikkri1) избавиться от коммерческого парсера Какие плюсы заявляют его авторы? Быстрый. Гугл тоже так думает. Проблема в vendor-lock in налицо, вендора купили, а потом купили того, кто его купил. Т.е. не горит, но лучше избавиться. Blazkowicz mikkri3) повысить скорость парсинга Рекомендую поискать сравнительные анализы, их в гугле полно. На rsdn тоже проскакивали. Потестировать самостоятельно на файлах нужного размера. ОК, будем тогда тестировать, прежде чем внедрять "новые" технологии. BlazkowiczПосмотреть JiBX - он по маппингу генерит методы на уровне байт кода. По идее это даёт наибольший перфоманс. Посмотрел бегло. Не очень нравится кодогенерация - не уверен, что будет легко получить одобрение на использование такой библиотеки. Хотя потестировать можно и даже, думаю, нужно.[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:42:04 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Софтверный проктологЙа использовал Castor. Вполне устроил как для парсинга, так и для рендеринга. Поискал в гугле. Такое мнение, что нет приемуществ у Castor, если не нужна полноценная сериализация/десериализация объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:43:52 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
mikkriПоискал в гугле. Такое мнение, что нет приемуществ у Castor, если не нужна полноценная сериализация/десериализация объектов. А вам не нужна и никогда нужна не будет? Возможности встраивать свои обработчики (де)сериализации тоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:44:49 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог mikkriПоискал в гугле. Такое мнение, что нет приемуществ у Castor, если не нужна полноценная сериализация/десериализация объектов. А вам не нужна и никогда нужна не будет? Возможности встраивать свои обработчики (де)сериализации тоже? 1) Есть решение использовать Velocity для сериализации. 2) И что такого хорошего в своих обработчиках? Чем реализация своих обработчиков лучше использования подхода из Digester? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:46:57 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
mikkri 1) Есть решение использовать Velocity для сериализации. 2) И что такого хорошего в своих обработчиках? Чем реализация своих обработчиков лучше использования подхода из Digester? Я лично не сталкивался с Digester. Но, если бы столкнулся: а) я не хочу писать ни строчки кода, отвечающей на правила десериализации — только в отдельном xml-файле; б) я хочу иметь возможность гибко обрабатывать любые входные данные, например если во входном документе тэг <a></a> пуст, то в поле требуемого класса в это поле должно записаться значение "0" (к примеру), или иметь возможность преобразования значения поля в дату (в произвольном формате) — при этом не писать ни строчки кода, а только описывать это в отдельном XML-файле. Digester всё это умеет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:53:53 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Софтверный проктологDigester всё это умеет? Не уверен, но точно, что мне это не важно. Валидация значений в любом случае будет в Java коде, чтобы в случае чего можно было ошибки описать подробно, а не так - "Ошибка во входящем сообщении! Ничего делать не будем" :-). XML используется для общения между внутренними системами, так что есть некоторый контроль над тем, как он выглядит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 18:59:45 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
mikkri Не уверен, но точно, что мне это не важно. Валидация значений в любом случае будет в Java коде, чтобы в случае чего можно было ошибки описать подробно, а не так - "Ошибка во входящем сообщении! Ничего делать не будем" :-). XML используется для общения между внутренними системами, так что есть некоторый контроль над тем, как он выглядит. Я про валидацию ничего не говорил (которая тоже может выполняться правилами DTD или XML Schema). Я говорил — сумеет Digester понять строку "2007-10-10 23:59:14.001" как дату и запихнуть её в переменную Date? Или вы собираетесь всё пихать в строки, а потом разбираться — чо как? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 19:09:29 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Софтверный проктолог Я про валидацию ничего не говорил (которая тоже может выполняться правилами DTD или XML Schema). Я говорил — сумеет Digester понять строку "2007-10-10 23:59:14.001" как дату и запихнуть её в переменную Date? Или вы собираетесь всё пихать в строки, а потом разбираться — чо как? :) Только валидатор в случае применения схемы или DTD отвергнет файл как невалидный, вместо того, чтобы подробно растолковать что не так и дать программе возможность выдать все детали в лог. Да, нет задачи парсить даты на уровне XML парсера. Т.е. читать все значения как строки, а потом в Java коде их валидировать и кидать ошибки, если что-то не так. Хотя, чисто теоритически, если б валидирующий парсер умел выявлять ошибки и репортить их вплоть до уровня, что собственно не так, думаю, можно было б сделать транслятор в человеческий язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 19:13:25 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
BlazkowiczApache Digester мой самый любимый opensource проект. C JAXB 2.0 не сравнивали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 08:17:43 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Leonidv BlazkowiczApache Digester мой самый любимый opensource проект. C JAXB 2.0 не сравнивали? Мне, как фанату JAXB, тоже очень интересно увидеть результаты тестирования быстродействия JAXB vs DOM, SAX, Digester и т.д. Почему у автора такая неприязнь к кодогенерации? Ведь в момент этой самой генерации, делается просто куча работы, которую вы сейчас делаете руками. Ну добавили новый атрибут к какому-нибудь элементу.. и чего? Все равно вам придется писать код, который этот атрибут извлекает. В случае с JAXB писать Java код не придется, только добавить новый атрибут в схему и перегенерировать классы, при определенных навыках 30 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 10:54:28 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Я, как фанат работать ручками, зачему следующее. Проще добавить атрибут и добавить пару аннотацией, чем генерить все заново :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 12:07:54 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
LeonidvЯ, как фанат работать ручками, зачему следующее. Проще добавить атрибут и добавить пару аннотацией, чем генерить все заново :) Ну так перекомпилиовать Java код все равно придется :) Да и в целом, чем это добавление аннотаций, проще запуска скрипта? Причем у нас в проекте, вся эта генерация выполняется автоматически, во время сборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 12:28:30 |
|
||
|
Apache Digester
|
|||
|---|---|---|---|
|
#18+
Leonidv BlazkowiczApache Digester мой самый любимый opensource проект. C JAXB 2.0 не сравнивали? Как я понимаю JAXB 2.0 не opensource проект, а как всегда у Sun - вендор-спецификация? У меня точно такая же неприязнь к кодогенерации, как у mikkri. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 12:32:33 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2144253]: |
0ms |
get settings: |
16ms |
get forum list: |
25ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
138ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
111ms |
get tp. blocked users: |
3ms |
| others: | 413ms |
| total: | 743ms |

| 0 / 0 |
