У меня есть серия сообщений xml, все с их собственными схемами и пространствами имен. Сообщения в настоящее время сортируются с использованием JAXB (мы все еще живем в среде Java 1.4), и у нас есть большой код устаревшего кода с использованием этого кода JAXB, поэтому любое решение должно быть минимально навязчивым.Как настроить jaxb-генерацию?
Проблема заключается в том, что, хотя каждое сообщение имеет набор общих тегов заголовков, пространство имен охватывает все сообщение и, следовательно, делает заголовок для каждого сообщения уникальным. В результате «общие» секции заголовков загружаются в версии с ограниченным пространством имен, используя общий класс, который реализуется с использованием очень уродливых классов прокси и кода динамического отражения. Этот общий класс был идентифицирован как источник некоторых проблем с производительностью.
В идеале я хочу осуществить замену, используя следующие:
- Используйте Maven2, чтобы заменить текущий процесс сборки ручной JAXB.
- Создайте одноразовые классы JAXB для «обычных» заголовков, которые будут использоваться повторно в каждом сообщении.
- Преобразование текущих динамических/прокси-классов для использования вышеуказанных конкретных классов заголовков.
- Создайте классы JAXB для секции unqiue каждого сообщения.
К сожалению, у меня нет контроля над структурой сообщений, иначе я бы посмотрел на создание отдельного пространства имен заголовка. Я думал о запуске XSLT-преобразования, чтобы «переименовать» пространство имен заголовков после сортировки и до отмены отмены, но я предпочел бы избежать дополнительной загрузки, если это возможно, даже если это означает более сложную сборку.
Является ли это тем, что я хочу сделать, или я пропустил что-то фундаментальное? Есть ли какие-либо намеки о том, как реализовать? Плагины и т. Д.?
Добавление 1: Связывание с использованием javaType будет делать эту работу, но оказывается, что не работает для сложных типов.
Добавления 2: Связывание с использованием класса почти делает это так хорошо, но я хотел бы, чтобы это указать конкретный класс и пакета, чтобы я мог игнорировать сгенерированные дубликаты.
Я заметил это, но у него есть предпосылка Java 1.5, и я застрял с 1.4 на данный момент. –
А, прости, я пропустил это. – janko
Это далеко не идеальный, но если вы все еще на самом деле застряли, вы можете попробовать использовать это, а затем ретротрансляции аннотаций в банке jaxb-api – GaZ