В CXF зачем использовать любую другую привязку, кроме JAXB? (MTOM-вложения, Aegis, XMLBeans,...)
Я играл с Apache CXF, в частности с различными привязками данных, которые он поддерживает: JAXB (по умолчанию), MTOM, Aegis и XMLBeans. Поскольку все они поддерживаются, я полагаю, что у каждого есть свои достоинства. Я придумал это:
- Очевидно, что MTOM предпочтительнее, когда речь идет о больших вложениях.
- JAXB зависит от аннотаций, поэтому он менее подходит, когда изменение классов ограничено.
- Эгида не имеет
wsdl2java
инструмент, поэтому он менее подходит для разработки "по контракту", то есть начните с WSDL и сгенерируйте из него свой Java-код. - Похоже, что Aegis обеспечивает немного больший контроль над отображением между классами Java и XML посредством своего декларативного синтаксиса в файлах Class.aegis.xml. С другой стороны, я не мог придумать ни одного сценария, в котором JAXB не справлялся с задачей.
Я нашел этот вопрос в сопоставлении JAXB и XMLBeans, но он не дает исчерпывающего обзора:
Помимо этих наивных, априорных соображений, есть ли у вас какие-то кровавые переживания, которые бы поддерживали использование любого другого связывания, кроме JAXB? Я спрашиваю с точки зрения CXF, но если какие-то другие варианты приходят на ум (например, Castor), пожалуйста, не стесняйтесь уточнять.
2 ответа
Если начать с нуля, чтобы создать первый веб-сервис WSDL, то я определенно рекомендую придерживаться JAXB в 95% случаев (возможно, даже выше). Это, безусловно, лучшая из протестированных привязок данных в CXF, которая работает довольно хорошо.
Где появляются другие привязки данных, как правило, для одного из двух случаев:
1) Java сначала использует те случаи, когда у вас уже есть что-то написанное на Java, которое вы хотите представить как веб-сервис без каких-либо изменений в коде. У Aegis есть свои сильные стороны, так как он предназначен для работы с более широким спектром вещей, чем JAXB. Однако, если вы МОЖЕТЕ изменить код, добавление аннотаций JAXB обычно не так сложно. Если у вас есть в основном нормальные "бобы", это не имеет большого значения.
2) Существующие приложения, использующие определенное отображение. Если у вас есть существующие приложения, которые ожидают bean-компоненты XMLBeans (или bean-объекты SDO при использовании 2.3-SNAPSHOT из CXF, или JiBX-бины, если следуют проекту GSoC), то использование других привязок данных может помочь, удалив любые необходимые отображения из JAXB в эти объектные модели.,
Надеюсь, это немного поможет.
Помните, что JAXB - это спецификация, поэтому существует несколько реализаций: Metro (эталонная реализация, MOXy (я технический лидер) и т. Д.
JAXB можно использовать, начиная с классов Java или схемы XML. Если у вас есть классы, которые нельзя изменить, отдельные имплементации JAXB предлагают расширения для обработки этого. Смотрите внешние метаданные MOXy:
JAXB был разработан для работы с вложениями MTOM, см. Маршаллер / демаршаллер вложения.
MOXy имеет сопоставления на основе XPath, которые предлагают полный контроль над вашей привязкой объекта к XML, см.: