Проанализировать XML-файл на стороне сервера GWT

#xml #gwt

#xml #gwt

Вопрос:

Как мне проанализировать XML-файл в GWT на стороне сервера? Я не могу использовать XMLParser, потому что это работает только на клиенте. Мне нужно прочитать XML-файл на стороне сервера, преобразовать содержимое в список и вернуть их клиенту, используя GWT-RPC.

Заранее спасибо.

Комментарии:

1. Это полностью зависит от того, какой стек приложений запущен на стороне сервера. Это может быть контейнер Java EE WAR. Это может быть фреймворк PHP. Это может быть Python, запущенный на wsgi под управлением Django. Или любой другой веб-фреймворк.

2. Обратите внимание, что GWT на стороне клиента — это в основном JavaScript. Это не делает никаких предположений о сервере, AFAIK.

3. @Santa — Спасибо, это помогло. Я использую GAE и пытался использовать XStream, но у него возникли проблемы с GAE. Я должен был упомянуть об этом в своей статье. Сейчас я пытаюсь использовать Apache Digester на основе приведенных ниже предложений.

Ответ №1:

Я использую JAXB из проекта Apache. http://jaxb.java.net /

Он немного отличается от библиотеки GWT XML. Вместо того, чтобы писать код для обхода XML-дерева и выполнять собственную обработку, вы определяете определение файла с помощью xsd, запускаете программу для создания набора классов передачи данных, а затем анализируете XML-файлы все сразу.

Несколько предостережений:

Убедитесь, что JAXB jar находятся над библиотеками jre в вашем пути сборки. Существуют проблемы с последними версиями и GAE, поэтому, если вы используете GAE, придерживайтесь версии 20090708.

Комментарии:

1. Спасибо, я собираюсь изучить это более кратко.

2. Re: Memcache Если вы обновляете xml с помощью повторного развертывания приложения, это автоматически очистит memcache. В противном случае вы можете написать небольшую службу GWT, которая позволила бы вам принудительно перечитывать. Наконец, если вы хотите что-то действительно сложное, вы можете проверить версию при принятии решения о том, извлекать ли из memcache или из файловой системы.

3. Я понимаю, о чем вы говорите. У меня есть 2 сценария. 1. Мое текущее значение по умолчанию — v5, и я повторно развертываю v5. 2. Текущее значение по умолчанию — v5, я загружаю v6 и делаю v6 по умолчанию. Будет ли memcache сброшен в обоих случаях? Кстати, в итоге я использовал JAXB для синтаксического анализа, и пока он работает хорошо. Спасибо за вашу помощь.

4. AFAICT при развертывании новой версии вашей программы (например, из eclipse) кэш памяти всегда полностью очищается. Кроме того, если у вас новая версия, вы никогда не будете использовать версию memcache из более старой версии. Итак, если вы обновляете XML, помещая его в свой jar-файл и просто повторно развертывая его, проблем с кэшем не возникнет. Проблема возникла бы, если бы вы помещали новый xml куда-нибудь еще, у которого был отдельный процесс обновления. Затем вам пришлось бы вручную очистить кэш. У меня очень похожая настройка, поэтому я рад помочь.

5. Мой XML включен в jar приложения. Итак, из того, что вы сказали, я должен быть в порядке. Я даю ему шанс и изначально добавлю некоторые записи журнала в код, чтобы проверить точное поведение. Я вернусь к этому. Спасибо, что поделились своим опытом.

Ответ №2:

Ваш вопрос немного неясен. Что вы имеете в виду под «преобразовать содержимое в список»?

Если все, что вы передаете клиенту, — это список сериализуемых / иссериализуемых POJO, то то, как вы получаете эти POJO, не должно иметь значения для клиента.

Вы можете использовать любой Java-совместимый сторонний анализатор или что-то вроде Apache Digester для сборки объектов

Комментарии:

1. Спасибо за ваш ответ. Да, это список сериализуемых POJO. Я использовал Apache Digester, и это сработало. Но чтение файла, содержащего всего 600 записей, показалось немного медленным, хотя я не проводил большого тестирования. С другой стороны, я использую GAE и пытаюсь взвесить вариант хранения записей в XML или хранилище данных app engine. Знаете ли вы, какой подход был бы лучшим с точки зрения производительности в том, что касается извлечения записей?

2. Какого размера файл, который вы читаете? И вы уверены, что медлительность заключается в чтении файла, а не в распределении POJOS?

3. Я не слишком знаком с GAE. Я большой поклонник XML, но это одна из технологий, которая почти не используется внутри Google. У меня сложилось впечатление, что материал, доступный в app engine, должен быть лучше для больших файлов, но я не уверен.