Что является различием между Солонкой XML и JAXB, связывающим с тех пор, и связывает объект Java с XML и наоборот.
Обновленный:
Как использование Солонки я могу сделать, это Принимает packageA.ClassA
и packageB.ClassA
имейте те же атрибуты и имя класса просто, что они были расположены в другом пакете.
packageA.ClassA - > XML -> packageB.ClassA
При помощи JAXB, если я делаю этот Маршальский объект packageA.ClassA
к XML и из неМаршалла XML в объект packageB.ClassA
Я получил ошибку Кастинга.
Обратите внимание, что JAXB является API, и существует несколько реализаций.
Sun предоставляет эталонную реализацию и упаковывает ее с J2EE (она также доступна в J2SE 1.6). Кастор был рожден до того, как JAXB вышел из Sun, и предлагает некоторые дополнительные функции. Но если все, что вам нужно, это простая привязка XML, то эталонная реализация Sun должна отлично работать.
В JavaWorld есть большая статья по этому поводу. Немного старая, но большинство идей, объясненных в ней, все еще остаются хорошими. И вы не найдете в статье упоминания о JAXB аннотациях, которые упростили дело в наши дни.
Простой - это простой в использовании связующий фреймворк, который работает с минимальной "простой" конфигурацией.
DOM - это совершенно другая концепция - все дело в синтаксическом разборе и ничего не делает в привязке. Используя парсер DOM, вы можете извлекать данные из XML. Но это не дает возможности отображения объектов. Так что вам все равно придется вытаскивать данные с помощью DOM, а затем писать код, чтобы подтолкнуть эти данные к java-объекту.
Вы получаете исключение приведения класса, потому что данный экземпляр JAXBContext
связывает каждое имя корневого элемента XML с одним классом привязки.
Итак, когда вы маршалируете packageA.ClassA
в XML, а затем снова демаршалируете его, результатом будет packageA.ClassA
, и вы не сможете его преобразовать.
Если вы хотите демаршалировать в packageB.ClassA
, вам необходимо создать второй JAXBContext
. Первый JAXBContext
знает о packageA.ClassA
, второй знает о packageB.ClassA
. Используйте первый для маршалинга в XML, второй - для демаршалинга. Это будет работать так, как вы ожидаете.