2009-05-21 8 views
12

JAXB kullanarak bir XSD dosyası Java sınıfları oluşturmak için bu Maven "görevi" var üretti.prefixing JAXB sınıflar

 <!-- 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 tipi "Kullanıcı" için, "Kullanıcı" (duh) adlı bir sınıf oluşturur. Bununla birlikte, "Kullanıcı" olarak adlandırılan bir JPA varlık sınıfım da var (farklı bir pakette olsa da). Oluşturulan sınıfların JAXB önekini "XML" gibi bir şeyle birlikte bırakmak için yukarıdaki XML yapılandırmasını değiştirebilir miyim?

cevap

19

Bu yaygın bir gereksinimdir. JAXB'nin Şema türü adlarını Java sınıf adlarına nasıl çevirdiğini özelleştirmek için ek bir JAXB bağlama dosyası sağlayarak bunu yapabilirsiniz.

Bu dosyalar normalde uzantısı ".xjb" biter. Örneğin, sizin şeması için bir tane oluşturmanız gerekir: Bunu yaptıktan sonra

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

Yapınızın dizinde bir yere xjb dosya açılır ve çeviri sırasında bunu faydalanmak için Maven söyle:

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

ve burada yol için bir ipucu: Eğer boşluk içeren bir yol ise (örneğin, "Documents and Settings \ kullanıcı \ projesi") daha sonra JAXB garip hatalarla üzerinde düşecek.

+0

maven-jaxb2-eklentisi yapılandırma etiketleri "bindingIncludes" ve "bindingInclude" değil "includeBindings" ve "includeBinding" gerektirir – kevinmrohr