2008-11-04 1 views
5

У меня есть XML-схема, для которой мне нужно будет создавать классы Java. Это не очень большая схема, я бы сказал, что это приведет к 20 классам. Я пытаюсь взвесить, следует ли использовать автоматическую привязку (например, поставляемую в JAXB или JiBX), или вручную писать мои собственные классы и использовать что-то вроде XStream для сортировки/отмены сортировки.Java Binding Vs Вручную определение классов

Каковы преимущества/недостатки написания ваших собственных классов, а не использование программы привязки.

Кроме того, я использую программу привязки, я привязан к ней навсегда. Например, если я использую компилятор привязки JAXB для создания классов, мне нужно использовать JAXB для всех маршаллинга/unmarshalling?

p.s. Я видел следующие вопросы XML связывания/сериализации, которые были полезны, но не ответил на мой вопрос полностью: xml-serialization-in-java и java-xml-binding

ответ

13

Я не думаю, что есть определенный ответ на ваш вопрос. Но я могу дать вам несколько советов. Вот некоторые вещи, чтобы рассмотреть следующие вопросы:

  1. Это отнимает много времени, чтобы написать маршалинг и unmarhsalling код, особенно в первый раз.

  2. Вам придется потратить немало времени на изучение нюансов вашей библиотеки DOM (Xerces или ее эквивалента).

  3. Существует много дублирования, поэтому в конечном итоге вы будете вынуждены писать некоторые вспомогательные классы.

  4. Вам потребуется много модульных тестов, чтобы убедиться, что вы покрыли все свои базы в области дополнительных элементов и атрибутов.

Глядя на этот список, довольно легко сказать «вот что делает JAXB для меня». Сделав для этого несколько лет, я бы сказал, что JAXB экономит вам довольно много времени и усилий, особенно последнюю итерацию JAXB в Java 5/6.

Но если вы идете с JAXB есть один урок, который мы узнали, трудный путь, что я хотел бы передать:

*** Не позволить JAXB сгенерированных классов просочиться в ваше приложение.

Как вы сказали в своем вопросе, это связывает все ваше приложение с тем, как JAXB делает вещь. Если JAXB нужно заменить (есть ряд причин, почему вы могли бы это сделать в будущем), то вам придется столкнуться с трудной и болезненной задачей (поверьте мне, мы это сделали, и мы никогда не столкнемся с этим положение снова).

Теперь мы всегда скрываем наши сгенерированные классы JAXB за фасадом или фабрикой, сопоставляя классы JAXB с нашими собственными доменами POJO, которые имеют требуемое поведение. Мы думаем о JAXB, поскольку мы делаем JDBC; JAXB - это еще один источник данных, другой способ получения данных и из нашего домена POJO. Домен POJO - это секретный соус, и мы контролируем, как они кодируются и как они используются. JAXB - это просто инструмент для сортировки и разборки.

+0

«Занимает много времени, чтобы написать маршаллинг и немаркирующий код, особенно в первый раз». - Верно, и я бы добавил следующее: «По крайней мере один раз вы ошибетесь». – 2008-11-04 12:35:07

0

Я не хочу начинать долгую и бесконечную войну на вопрос, но из моего опыта - если вы можете использовать инструмент, который генерирует весь код для вас и не требует JAR-надежности. Код, который будет сгенерирован, будет уродливым, но он будет работать до тех пор, пока вы явно не увидите необходимость ручной работы с рукописным кодом.В большинстве случаев вам не нужно это делать. Прошу прощения, я не могу дать мгновенную рекомендацию о том, какой инструмент использовать.

 Смежные вопросы

  • Нет связанных вопросов^_^