XStream или Простой

Мне нужно решить, какой из них использовать. Мой случай довольно прост. Мне нужно конвертировать простой POJO / Bean в XML, а затем обратно. Ничего особенного.

Одна вещь, которую я ищу, должна включать родительские свойства. Лучше всего, если он может работать с супертипом, который может быть просто интерфейсом маркера.

Если кто-то может сравнить эти два с минусами и плюсами, и что не хватает в какой. Я знаю, что XStream также поддерживает JSON, это плюс. Но Simple с первого взгляда выглядел проще, если оставить JSON в стороне. Каково будущее Simple с точки зрения развития и сообщества? Я считаю, что XStream довольно популярен, даже слово «XStream» затронуло множество тем на SO.

Спасибо.

13.10.2009 03:39:13
9 ОТВЕТОВ
РЕШЕНИЕ

Почему бы не использовать JAXB вместо этого?

  • 100% охват схемы
  • Огромная база пользователей
  • Несколько реализаций (в случае, если вы столкнулись с ошибкой в ​​одной)
  • Включено в Java SE 6, совместимо с JDK 1.5
  • Связующий слой для JAX-WS (веб-сервисы)
  • Связующий слой для JAX-RS (Rest)
  • Совместим с JSON (при использовании с такими библиотеками, как Jettison)

Полезные ресурсы:

8
12.07.2012 09:15:34
Посмотрите мой пост в блоге, в котором сравниваются JAXB и XStream: bdoughan.blogspot.com/2010/10/…
bdoughan 7.10.2010 18:24:17
Также ознакомьтесь с моим сообщением в блоге о сравнении JAXB & Simple: bdoughan.blogspot.com/2010/10/…
bdoughan 25.10.2010 18:02:40
JAXB - лучший, но разработчики Android должны помнить, что вы не можете использовать его из-за отсутствия зависимостей пакетов. Все остальные должны использовать JAXB.
Robert Massaioli 5.06.2011 23:43:04

Я бы порекомендовал вам взглянуть на Simple

7
13.10.2009 03:52:27
Отредактировал мой вопрос после вашего ответа. Спасибо за то, что представили это. Один мой друг из JavaRanc заставил меня понять, что Betwixt уже 2 года, более того, у него есть только один коммиттер. Так что для меня это не вопрос. Теперь вы можете выделить некоторые области Simple Framework, например, как он будет более подходящим для меня. Большое спасибо.
Adeel Ansari 13.10.2009 15:30:58

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

2
14.10.2009 09:55:20
Спасибо, ко второму предложению.
Adeel Ansari 16.10.2009 07:50:22

До сих пор я никогда не использовал Simple Framework.

Основано на моем опыте с Xstream. Он хорошо работал на XML. Однако для JSON результат не такой точный, как ожидалось, когда я пытаюсь сериализовать бин, содержащий List Hashtable.

1
24.11.2009 10:29:22
Прямо сейчас мне не нужно заниматься JSON. Кстати, я пробовал Simple и XStream оба. Оба дали мне желаемый результат. Но я придерживаюсь XStream, я думаю, из-за его популярности. :) Спасибо, в любом случае.
Adeel Ansari 24.11.2009 12:34:11

Просто прочитав документацию (я сталкиваюсь с той же проблемой, что и вы, но еще не пробовал; возьмите это с крошкой соли):

XSTREAM

  1. Очень, очень легко для Google. Примеры, сообщения на форуме и сообщения в блоге об этом тривиально найти.
  2. Работает из коробки. (Конечно, может потребоваться доработка, но это сразу даст вам кое-что .)
  3. Преобразование переменной в атрибут требует создания отдельного класса преобразователя и его регистрации в XStream. (Это не сложно для простых значений, но это немного дополнительная работа.)
  4. Совсем не работает с версиями, если только вы не добавите в XMT (другую библиотеку); если XML, сгенерированный вашим классом, изменится, он вообще не будет десериализован. (После того, как вы добавите XMT, вы можете изменять ваши классы так, как вам нравится, и XStream прекрасно справится с этим, пока вы создаете все возрастающую линию функций инкрементного управления версиями.)
  5. Все корректировки требуют от вас написания кода, либо для реализации ваших собственных функций (de) сериализации, либо для вызова функций XStream, чтобы изменить используемые методы (de) сериализации.
  6. Тривиальное примечание по синтаксису: вам нужно привести вывод десериализатора к вашему классу.

ПРОСТО

  1. Домашняя страница является единственным надежным источником информации; в нем перечислены полдюжины внешних статей, и есть список рассылки, но вы не можете найти его в диком Интернете.
  2. Требуется аннотировать ваш код, прежде чем он работает.
  3. Легко сделать более компактный файл XML, используя атрибуты вместо узлов XML для каждого свойства.
  4. Обрабатывает управление версиями, будучи нестрогим при разборе всякий раз, когда класс верен, но версия отличается. (т. е. если вы добавили два поля и удалили одно со времени последней версии, он будет игнорировать удаленное поле и не выбрасывать исключение, но не будет устанавливать добавленные поля.) Как и в случае с XStream, он не имеет способ переноса данных из одной версии в другую, но, в отличие от XStream, нет внешней библиотеки, в которую можно было бы вмешиваться и обрабатывать ее. Предположительно, способ справиться с этим с помощью некоторой внешней функции (и, возможно, переменной «version» в вашем классе?), Так что вы делаете

    Stuff myRestoredStuff = serializer.read (Stuff.class, file); myRestoredStuff.sanityCheck ();

  5. Обычно используемые (де) сериализационные корректировки производятся путем добавления / редактирования аннотаций, но есть поддержка написания ваших собственных (де) сериализационных функций для переопределения стандартных методов, если вам нужно сделать что-то неуклюжее.

  6. Примечание к тривиальному синтаксису: вам нужно передать класс восстановленного объекта в десериализатор (но вам не нужно приводить результат).
11
29.04.2010 06:42:35
Я отвлекся на что-то еще и бросил проект.
PotatoEngineer 4.02.2012 02:02:41

Быстро взглянул на простое, читая stackoverflow; В качестве дополнения к полезному посту Пола Маршалла, я подумал, что упомяну, что Simple, похоже, поддерживает управление версиями посредством аннотаций.

http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#version

0
7.07.2010 10:31:35

Simple намного медленнее, чем XStream (в сериализации объектов в xml)

http://pronicles.blogspot.com/2011/03/xstream-vs-simple.html

0
17.03.2011 07:17:04
Simple примерно в 4 раза быстрее XStream, тест по приведенной выше ссылке похож на то, что написал бы пятилетний ребенок. Я не думаю, что человек, который написал это, понимает, как использовать фреймворк или как написать надежный тест.
ng. 19.04.2011 02:54:10
если хочешь сделать что-то хорошее - сделай это сам =) напиши свое
user293756 25.04.2011 15:39:08
Просто чтобы вы знали, что это автор самого простого, который прокомментировал. Я подозреваю, что он знал бы, насколько быстро его собственная библиотека сравнивается с XStream.
Robert Massaioli 26.05.2011 04:19:03

Думаю, я поделюсь этим здесь. Чтобы заставить XStream игнорировать пропущенные поля (когда вы удалили свойство):

 XStream xstream = new XStream() {
  @Override
  protected MapperWrapper wrapMapper(MapperWrapper next) {
    return new MapperWrapper(next) {
      @Override
      public boolean shouldSerializeMember(Class definedIn,
              String fieldName) {
        if (definedIn == Object.class) {
          return false;
        }
        return super.shouldSerializeMember(definedIn, fieldName);
      }
    };
  }
};   

Это также может быть расширено для обработки версий и переименований свойств.

Благодарим Питера Восса: https://pvoss.wordpress.com/2009/01/08/xstream

0
12.07.2012 06:46:33

Один из "простых" (каламбурных) недостатков Simple и Jaxb заключается в том, что они требуют аннотирования ваших объектов перед тем, как их можно сериализовать в XML. Что происходит в тот день, когда вы быстро захотите сериализовать чужой код с объектами, которые не аннотированы? Если вы видите, что это произойдет однажды, XStream подойдет лучше. (Иногда это просто сводится к простым требованиям, как это, чтобы управлять вашими решениями).

1
27.12.2012 21:44:43