2009-05-21 5 views
12

У меня есть задание Maven для генерации Java-классов из файла XSD с использованием JAXB.Префикс 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»?

ответ

19

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

+0

Конфигурация maven-jaxb2-plugin требует, чтобы теги «bindingIncludes» и «bindingInclude», а не «includeBindings» и «includeBinding», – kevinmrohr