Добавление префикса к классам , сгенерированным JAXB
-
23-08-2019 - |
Вопрос
У меня есть эта 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-типа "User" он генерирует класс с именем "User" (duh).Однако у меня также есть класс объектов JPA под названием "User" (хотя и в другом пакете).Могу ли я изменить конфигурацию XML выше, чтобы позволить JAXB добавлять к сгенерированным классам префикс чего-то вроде "XML"?
Решение
Это общее требование.Вы можете сделать это, предоставив дополнительный файл привязки 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>
И вот подсказка на дорогу:если вы находитесь на пути, содержащем пробелы (например"Documents and Settings\user\ project"), то JAXB завершится со странными ошибками.