Сохранение графов объектов Java в виде файла XML - PullRequest
13 голосов
/ 15 сентября 2008

Какая самая простая в использовании технология, доступная для сохранения произвольного графа объектов Java в виде файла XML (и для возможности повторной гидратации объектов позже)?

Ответы [ 15 ]

8 голосов
/ 15 сентября 2008

Самый простой способ - сериализовать граф объектов. Java 1.4 имеет встроенную поддержку сериализации в виде XML.

Решение, которое я успешно использовал, это XStream (http://x -stream.github.io /) - это небольшая библиотека, которая позволит вам легко сериализовать и десериализовывать в и из XML.

Недостатком является то, что вы можете только очень ограниченно определить полученный XML; что не может быть необходимым в вашем случае.

4 голосов
/ 15 сентября 2008

XStream от людей из Thoughtworks имеет простой API и даже работает с такими вещами, как дубликаты и циклические ссылки. Похоже, что он активно развивается и хорошо документирован.

http://x -stream.github.io /

4 голосов
/ 15 сентября 2008

Apache довольно прост: http://commons.apache.org/digester/
JAXB новее и поставляется с комментариями: https://jaxb.dev.java.net

3 голосов
/ 25 сентября 2008

Simple

Хотя XStream и JAXB могут сериализовать некоторые графы объектов успешно, они не могут обрабатывать очень сложные графы. Наиболее мощным решением для больших сложных графов является Simple XML Serialization . Он может обрабатывать любой график. Кроме того, его легко и быстро использовать без каких-либо зависимостей.

Цитировать Простую страницу проекта:

Simple - это высокопроизводительная среда сериализации и конфигурации XML для Java. Его цель - предоставить структуру XML, которая обеспечивает быструю разработку систем конфигурации и связи XML. Эта структура помогает разработке систем XML с минимальными усилиями и уменьшением количества ошибок. Он предлагает полную сериализацию и десериализацию объектов, поддерживая каждую встреченную ссылку. По сути, это похоже на сериализацию C # XML для платформы Java, но предлагает дополнительные функции для перехвата и манипулирования.

3 голосов
/ 15 сентября 2008

Используйте java.beans.XMLEncoder. Его API очень прост (на самом деле немного слишком прост; было бы неплохо подключить его к SAX ContentHandler), но он работает на многих графах из коробки, и легко создать свой собственный делегат персистенции для любого нечетного классы мяча, с которыми вы можете столкнуться.

  • Синтаксис, используемый XMLDecoder, позволяет вам вызвать любой метод, экземпляр или статический, включая конструкторы, так что он очень гибкий.
  • Имя других кодировщиков элементы и атрибуты после урока и имена полей, поэтому нет фиксированной схемы для результата. XMLEncoder's XML следует простому DTD и может легко быть проверенным или преобразованным, даже когда вы никогда не видели типы, которые он использует.
  • Вы можете назначить объектам идентификатор и ссылки на них по всему графику.
  • Вы можете ссылаться на определенные константы в классах или интерфейсах.

И он встроен в Java SE, поэтому вам не нужно поставлять дополнительную библиотеку.

2 голосов
/ 16 сентября 2008

Если вам нужен контроль над генерируемым XML, я рекомендую взглянуть на Betwixt (http://commons.apache.org/betwixt/) - он добавляет множество функциональных возможностей в дайджест Apache (Digester хорош для построения графов объектов из XML, но не так хорош для их генерации).

Если вы действительно не заботитесь о генерируемом XML (просто о том, что он может быть десериализован в будущем), то классы XMLEncoder / Decoder встроены в Java или хорошо - если объекты, которые вы сериализуете, следуют JavaBean спецификация. Самая большая область, в которой я столкнулся с проблемами с решением XMLEncoder / Decoder, - это если у вас есть компонент, который возвращает неизменный список для одного из его свойств - кодировщик не очень хорошо справляется с этой ситуацией.

2 голосов
/ 15 сентября 2008

JAX-B является частью стандартных API и действительно прост в использовании.

2 голосов
/ 15 сентября 2008

Простой API, ну просто! Это действительно хорошо. http://simple.sourceforge.net/

Вы также можете использовать XStream: http://www.ibm.com/developerworks/library/x-xstream/index.html

1 голос
/ 25 февраля 2010

I собрал список с большим количеством библиотек сериализации xml и его лицензией

1 голос
/ 16 сентября 2008

Я бы второй (или третий) XStream. Он читает и записывает XML без необходимости специальной настройки привязки или размещения большого количества постороннего синтаксиса в XML.

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