Префикс сгенерированных JAXB классов - PullRequest
12 голосов
/ 21 мая 2009

У меня есть эта "задача" 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 Ответ

21 голосов
/ 24 мая 2009

Это общее требование. Вы можете сделать это, предоставив дополнительный файл привязки 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 упадет со странными ошибками.

...