Факты
В моем приложении java мне приходится обрабатывать XML файлы с разными версиями схем (xsd файлы) одновременно. Содержимое XML файлов немного изменилось между разными версиями, поэтому я хотел бы использовать в основном один и тот же код для его обработки и просто делать некоторые случаи, зависящие от версии используемой схемы.
Текущее решение
Сейчас я разбираю XML файлы с помощью анализатора SAX и своего собственного ContentHandler
, игнорируя версию схемы, и просто проверяю, нужны ли теги, которые мне нужны для обработки.
Возможная альтернатива
Мне бы очень хотелось использовать JAXB для генерации классов для разбора XML файлов. Таким образом я мог бы удалить все жестко закодированные строки (константы) из моего java-кода и обработать сгенерированные классы.
Вопрос (ы)
- Как я могу обрабатывать разные версии схемы унифицированным способом с помощью JAXB?
- Есть ли лучшее решение?
Прогресс
Я скомпилировал версии схемы для разных пакетов v1, v2 и v3. Теперь я могу создать Unmarshaller
следующим образом:
JAXBContext jc = JAXBContext.newInstance(
v1.Root.class, v2.Root.class, v3.Root.class );
Unmarshaller u = jc.createUnmarshaller();
Теперь u.unmarshal( xmlInputStream );
дает мне класс Root
из пакета, соответствующего схеме XML файла.
Далее я попытаюсь определить interface
для доступа к общим частям схем. Если вы сделали что-то подобное раньше, сообщите мне. В то же время я читаю спецификации JAXB...