Префикс сгенерированных JAXB классов
У меня есть эта "задача" Maven для генерации классов Java из файла XSD с использованием JAXB.
<!-- XML to Java classes -->
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generatePackage>nl.compay.service</generatePackage>
<schemaDirectory>src/main/webapp/compay</schemaDirectory>
</configuration>
</plugin>
Для XSD-типа "Пользователь" создается класс с именем "Пользователь" (duh). Тем не менее, у меня также есть класс сущности JPA под названием "Пользователь" (хотя в другом пакете). Могу ли я изменить конфигурацию XML выше, чтобы позволить JAXB добавлять префикс сгенерированных классов к чему-то вроде "XML"?
1 ответ
Это общее требование. Вы можете сделать это, предоставив дополнительный файл привязки JAXB для настройки того, как JAXB преобразует имена типов схемы в имена классов Java.
Эти файлы обычно заканчиваются расширением ".xjb". Вам нужно создать один для вашей схемы, например:
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc">
<jxb:bindings schemaLocation="nl.company.service.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:nameXmlTransform>
<jxb:typeName prefix="XML"/>
<jxb:anonymousTypeName prefix="XML"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
После того, как вы это сделаете, поместите файл xjb куда-нибудь в директорию сборки и скажите Maven, чтобы он использовался во время перевода:
<includeBindings>
<includeBinding>mybindings.xjb</includeBinding>
</includeBindings>
И вот подсказка для дороги: если вы находитесь в пути, который содержит пробелы (например, "Документы и настройки \ пользователь \ проект"), то JAXB будет сбиваться со странными ошибками.