2009-05-21 11 views
12

Mam to zadanie Maven do generowania klas Java z pliku XSD przy użyciu JAXB.Prefixing generowanych klas 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> 

Dla typu XSD "Użytkownik", generuje klasę o nazwie "Użytkownik" (duh). Jednak mam również klasę jednostki JPA o nazwie "Użytkownik" (choć w innym pakiecie). Czy mogę zmienić powyższą konfigurację XML, aby umożliwić JAXB przedrostek wygenerowanych klas za pomocą czegoś takiego jak "XML"?

Odpowiedz

19

Jest to typowe wymaganie. Można to zrobić, udostępniając dodatkowy plik powiązania JAXB, aby dostosować sposób, w jaki JAXB tłumaczy nazwy typów schematów na nazwy klas Java.

Pliki te zwykle kończą się rozszerzeniem ".xjb". Musisz utworzyć dla swojego schematu, na przykład:

<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> 

Po zrobiłeś, że upuść plik xjb gdzieś w katalogu build i powiedzieć Maven, aby korzystanie z niej podczas tłumaczenia:

<includeBindings> 
    <includeBinding>mybindings.xjb</includeBinding> 
</includeBindings> 

A oto podpowiedź dla drogi: jeśli jesteś w ścieżce, która zawiera spacje (np. "Dokumenty i ustawienia \ użytkownik \ projekt"), wówczas JAXB popadnie z dziwnymi błędami.

+0

Konfiguracja wtyczki maven-jaxb2 wymaga znaczników "bindingIncludes" i "bindingInclude", a nie "includeBindings" i "includeBinding" – kevinmrohr