Добавление префикса к классам , сгенерированным JAXB

StackOverflow https://stackoverflow.com/questions/892298

  •  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 завершится со странными ошибками.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top