2010-09-03 2 views
7

Я играю с Apache CXF, в частности различные привязки данных, которые он поддерживает: JAXB (по умолчанию), MTOM, Aegis и XMLBeans. Поскольку все они поддерживаются, я полагаю, что каждый из них имеет свои достоинства. Я придумал их:Внутри CXF, зачем использовать любую другую привязку, чем JAXB? (Вложения MTOM, Aegis, XMLBeans, ...)

  • Очевидно, что MTOM предпочтительнее, если речь идет о больших приложениях.
  • JAXB зависит от аннотаций, поэтому он менее подходит, когда модификация классов ограничена.
  • У Aegis нет инструмента wsdl2java, поэтому он менее подходит для разработки «контракт-первый», то есть начинается с WSDL и генерирует код Java из этого.
  • Это что Aegis предоставляет немного больше контроля над сопоставлением между классами Java и XML через его декларативный синтаксис в Класс .aegis.xml файлы. С другой стороны, я не мог разработать какие-либо сценарии, в которых JAXB не сделал этого трюка.

Я нашел этот вопрос противопоставления JAXB и XMLBeans, но он не дает полный обзор:

JAXB vs Apache XMLBeans

Помимо этих наивным, априорные соображения, у вас есть какие-либо кровь-and что может повлиять на использование каких-либо других привязок, кроме JAXB? Я спрашиваю с точки зрения CXF, но если на ум приходят другие варианты (например, Castor), пожалуйста, не стесняйтесь уточнять.

ответ

3

Если вы начинаете с нуля, чтобы создать первую веб-службу WSDL, то я определенно рекомендую придерживаться JAXB в 95% случаев (возможно, даже выше). Это определенно лучший протестированный привязчик данных в CXF и работает довольно хорошо.

Где остальные DataBindings бывают, как правило, на одном из двух случаев:

1) Java случаи первого использования, где у вас есть что-то уже написанный на Java, что вы хотите, чтобы выставить в качестве веб-службы с практически без изменений к коду. У Aegis есть свои сильные стороны, поскольку он разработан, чтобы иметь возможность обрабатывать более широкий диапазон вещей, чем JAXB. Однако, если вы можете изменить код, добавление аннотаций JAXB обычно не так уж сложно. Если у вас в основном нормальные «бобы», это не имеет большого значения.

2) Существующие приложения, которые используют определенное сопоставление. Если у вас возникли приложения, ожидающие bean-компоненты XMLBeans (или SDO-компоненты при использовании 2.3-SNAPSHOT из CXF или JiBX-компонентов, если следовать проекту GSoC), то использование других привязок данных может помочь, удалив любые необходимые сопоставления из JAXB для этих объектных моделей ,

Надеюсь, что поможет немного.

3

Помните, что JAXB is a specification так есть множество реализаций: Metro (Reference Implementation, MOXy (я тек свинец) и т.д.

JAXB можно использовать, начиная с классов Java или XML-схемы Если у вас есть классы. которые не могут быть изменены, индивидуальные приемы JAXB предлагают расширения, чтобы справиться с этим.См Externalizable метаданные Moxy в:

JAXB был разработан для работы с вложениями MTOM увидеть вложение ИАС/unmarshaller.

Moxy имеет XPath на основе сопоставления, которые предлагает полный контроль над объектом-к-XML связывания SEE: