2014-09-23 18 views
1

Несколько лет назад я написал приложение, которое использовало JAXB для создания привязок Java для XML-схемы. Коды приложений и схема были обновлены довольно много за эти годы, но банки JAXB остались неизменными с 2008 года, когда я начал использовать JAXB для этого приложения. Я использовал Ant для создания приложения, включая создание и компиляцию привязок, и все работало нормально, по крайней мере, на двух машинах разработки XP Pro. Я внес некоторые изменения в схему и никогда не думал о JAXB.JAXB обратная совместимость

Недавно я попытался восстановить приложение с нуля на новом ноутбуке, и сборка продолжает терпеть неудачу. Новый 64-разрядный ноутбук работает под управлением Windows 7 Pro, у него появился новый JDK (1.7.0_45) и новая версия Ant (1.9.3). Мне удалось обойти некоторые странные проблемы, переключившись на еще более новую версию ant (1.9.4) и переключившись на последние JAXB-банки. На данный момент я даже не помню, каковы были эти проблемы (но я могу воссоздать их, вернувшись к более старым JAXB-банкам в SVN).

После обновления JAXB у меня возникли проблемы. Прежде всего, задача xjc в муравьике, по-видимому, интерпретирует атрибут target по-разному; он бросил некоторую ошибку, и, видимо, destdir имеет смысловое значение, которое раньше имело target.

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

Есть ли способ сделать новую версию JAXB обратной совместимостью? Мои другие варианты - попробовать обновить код для работы с новыми привязками, что кажется много ненужной работой или возвращением к старым JDK и Ant.

ответ

0

Ваш старый проект, похоже, использует JAXB 1, тогда как все инструменты теперь имеют JAXB 2.x по умолчанию.

Попробуйте следующее в задаче XJC:

  • source="1.0"
  • target="1.0"

Смотрите эти документы:

+0

Я думаю, что я пробовал что-то вроде этого, но это не сработало, поэтому я решил, что делаю что-то неправильно. Я получаю ошибку _Illegal версии 1.0_, когда я указываю эти атрибуты с этими значениями, или просто 'source =" 1.0 "'. Если я укажу только 'target =" 1.0 "' Я получаю _1.0, это не допустимый номер версии. Возможно, вы имели в виду @destdir? _. Это довольно запутанно. – biggvsdiccvs

1

Это конец ответа на исходное сообщение. Но должно быть хорошим как ссылка для других людей. Я встретил ту же проблему. Вот то, что сработало для меня, пройдя большую часть той же борьбы, пытающейся перестроить схему/привязку JAXB 1.0 с использованием более поздних JDK (8 и 7).

  • Моя цель - построить с помощью новейших JDK без хлопот по модернизации JAXB, если это возможно.
  • JDK 7 & 8 не удалось построить JAXB 1.0 из-за ClassCastException, выброшенного из <xjc>, возможно, из-за несовместимых функций языка. JDK 5 & 6 работа, однако.
  • Я прошел несколько попыток, пытаясь перейти на последнюю версию JAXB 2.11.12,
    1. Update муравей файл сборка <xjc> задачи заменить цели атрибут с deskdir
    2. Изменить привязки файлов синтаксис - bindingStyle атрибут был удален в <jxb:globalBindings> в последнем JAXB - мы используем modelGroupBinding
    3. Корректировка суффикса файлов обязательных классов, чтобы избежать конфликтов имен. Обновите источники для генерируемых новых имен типов.
    4. По-прежнему сохраняются конфликты имен и исходные обновления.
  • я решил прекратить идти дальше вниз по кроличьей норе делая все эти изменения и сосредоточить внимание на поиск только одна версии JAXB, который генерирует JDK 7 & 8 совместимых источники, но до сих пор поддерживает JAXB 1.0 схему и привязку.
  • Новее <xjc> задача поддерживает версию спецификации источник атрибут. Однако, как выяснил оригинальный плакат, поддержка «1.0» была удалена в более поздних дистрибутивах JAXB
  • Сообщение об ошибке «Illgal version 1.0» при использовании <xjc> связано с поддержкой версии 1.0, было удалено с тех пор, как JAXB 2.2.7 (https://jaxb.java.net/nonav/2.2.11/docs/ch02.html#a-2-2-7)
  • Однако JAXB 2.2.6 не работает. Кажется, что ошибка в версии «jaxb-xjc.jar» неверно генерирует источники на основе атрибута , в результате чего во время сборки создается определенное значение ClassNotFoundException.
  • Я читал отчеты о JAXB 2.1.18 несоблюдения «1.0» источника, а
  • В конце концов я нашел JAXB 2.0.5 должна быть одна версии, которая может генерировать JDK 7 & 8 совместимых источников с использованием JAXB 1.0 источника схемы и привязки.
    • падение в JAXB-RI 2.0.5 LIBS и удалить старые JAXB-libs.jar
    • Добавить источник = "1,0" приписывать <xjc> задачу
    • Нет необходимости конвертировать <xjc>"цель" атрибут «deskdir» в этой версии
    • Я не проверял несколько версий за 2.0.5, но возможно есть более высокие версии, что делает то же самое
Смежные вопросы