Префикс сгенерированных классов 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 «Пользователь» он создает класс с именем «Пользователь» (да). Однако у меня также есть класс сущности JPA под названием «Пользователь» (хотя и в другом пакете). Могу ли я изменить конфигурацию XML выше, чтобы позволить JAXB префикс сгенерированных классов чем-то вроде «XML»?


person Bart van Heukelom    schedule 21.05.2009    source источник


Ответы (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>

И вот подсказка на дорогу: если вы находитесь на пути, который содержит пробелы (например, «Documents and Settings \ user \ project»), тогда JAXB выдаст странные ошибки.

person xcut    schedule 24.05.2009
comment
Для конфигурации maven-jaxb2-plugin требуются теги bindingIncludes и bindingInclude, а не includeBindings и includeBinding. - person kevinmrohr; 29.10.2012