Каково различие между Солонкой привязка XML и привязкой JAXB

Что является различием между Солонкой XML и JAXB, связывающим с тех пор, и связывает объект Java с XML и наоборот.

Обновленный:

Как использование Солонки я могу сделать, это Принимает packageA.ClassA и packageB.ClassA имейте те же атрибуты и имя класса просто, что они были расположены в другом пакете.

packageA.ClassA - > XML -> packageB.ClassA 

При помощи JAXB, если я делаю этот Маршальский объект packageA.ClassA к XML и из неМаршалла XML в объект packageB.ClassA Я получил ошибку Кастинга.

10
задан skaffman 7 June 2010 в 21:07
поделиться

2 ответа

Обратите внимание, что JAXB является API, и существует несколько реализаций.

Sun предоставляет эталонную реализацию и упаковывает ее с J2EE (она также доступна в J2SE 1.6). Кастор был рожден до того, как JAXB вышел из Sun, и предлагает некоторые дополнительные функции. Но если все, что вам нужно, это простая привязка XML, то эталонная реализация Sun должна отлично работать.

В JavaWorld есть большая статья по этому поводу. Немного старая, но большинство идей, объясненных в ней, все еще остаются хорошими. И вы не найдете в статье упоминания о JAXB аннотациях, которые упростили дело в наши дни.

Простой - это простой в использовании связующий фреймворк, который работает с минимальной "простой" конфигурацией.

DOM - это совершенно другая концепция - все дело в синтаксическом разборе и ничего не делает в привязке. Используя парсер DOM, вы можете извлекать данные из XML. Но это не дает возможности отображения объектов. Так что вам все равно придется вытаскивать данные с помощью DOM, а затем писать код, чтобы подтолкнуть эти данные к java-объекту.

16
ответ дан 3 December 2019 в 20:04
поделиться

Вы получаете исключение приведения класса, потому что данный экземпляр JAXBContext связывает каждое имя корневого элемента XML с одним классом привязки.

Итак, когда вы маршалируете packageA.ClassA в XML, а затем снова демаршалируете его, результатом будет packageA.ClassA , и вы не сможете его преобразовать.

Если вы хотите демаршалировать в packageB.ClassA , вам необходимо создать второй JAXBContext . Первый JAXBContext знает о packageA.ClassA , второй знает о packageB.ClassA . Используйте первый для маршалинга в XML, второй - для демаршалинга. Это будет работать так, как вы ожидаете.

3
ответ дан 3 December 2019 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: