Я думаю, что вы лучший вариант заключается в использовании Moxy XML привязок:
Это позволяет определить XML < -> Java отображения в виде файлов XML вместо аннотации :
<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="example">
<java-types>
<java-type name="Customer">
<xml-root-element name="customer-info" />
<java-attributes>
<xml-attribute java-attribute="custId" name="customer-id" />
<xml-element java-attribute="picture" name="picture-hex">
<xml-schema-type name="hexBinary" />
<xml-java-type-adapter
value="example.adapters.MyHexConverter" />
</xml-element>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
Вы можете использовать этот файл через JAXBContextProperties.OXM_METADATA_SOURCE
свойства:
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream);
JAXBContext ctx = JAXBContext.newInstance(new Class[] { Customer.class }, properties);
Так что, если вы хотите несколько различных отображений для того же класса, просто написать несколько привязок XML и создать JAXBContext
с соответствующими файлами. Я думаю, что это лучшие варианты прямо сейчас, с MOXy
С чистым JAXB RI вы можете написать собственный читатель аннотаций. Я сделал это один раз с Annox:
Другой вариант был JBoss JAXBIntroductions, а также на основе читателя пользовательских аннотаций:
Но я Я не уверен, что это уже живое.
Поскольку вам нужно несколько сопоставлений, вам придется писать их (все, кроме одного) вручную. Вы можете создать один набор сопоставлений в виде аннотаций, но дальнейшие сопоставления должны быть записаны вручную. Или, допустим, я не знаю о плагине или инструменте, который генерирует, например, MOXy привязки XML. Не было бы большой проблемой написать одну, хотя.
Вы также можете использовать совершенно другой подход.Вместо того, чтобы сопоставлять одну центральную модель с разными отображениями/форматами, вы можете отобразить в этих форматах отдельный пакет DTO. А затем конвертируйте между DTO и центральной моделью. Что-то вроде
XML(1) <-> DTO(1)|<-\
XML(2) <-> DTO(2)|<--*->Model
XML(3) <-> DTO(3)|<-/
Таким образом, вы будете иметь чистые DTOs за формат обмена (который вы можете генерировать из схем) и единый центральный бизнес-модель (чтобы управлять ими всеми). Вам нужно будет преобразовать между DTO и Model, это можно обработать с помощью инструмента, такого как Dozer.
Если это лучший подход или нет, зависит от того, насколько сложны ваши форматы и насколько они отличаются друг от друга.
Что касается ваших вопросов:
1) Там нет ничего особенного Eclipse, просто добавьте Moxy в зависимости и следовать документации.
2) Я описал несколько вариантов выше.
Да, с того момента, когда я раньше смотрел JBoss, он казался устаревшим и полезным в течение времени, когда JAXB не поддерживал внешние привязки. Я пробовал первый подход с MOXy. Однако я столкнулся с некоторыми проблемами, в которых, по-видимому, не принимается обязательный файл. Я разместил здесь свой вопрос (http://stackoverflow.com/questions/33112876/jaxb-moxy-external-bindings-file-not-beingread). Цените это, если сможете помочь. – GenerousJoker