Подтвердить что ты не робот

Префикс генерируемых классов 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"?

4b9b3361

Ответ 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 будет падать со странными ошибками.