2009-12-17 10 views
9

Sto usando JAXB per generare Java classe di oggetti da schemi XML all'interno di uno script Ant in questo modo:Come posso elaborare più shemas xsd usando jaxb e l'attività Ant xjc?

<!-- JAXB compiler task definition --> 
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" 
        classpathref="master-classpath"/> 

<!-- Generates the source code from the ff.xsd schema using jaxb --> 
<target name="option-generate" description="Generates the source code"> 
    <mkdir dir="${generated-src.dir}/${option.dir}"/> 
    <xjc schema="${config.dir}/ff.xsd" destdir="${generated-src.dir}" 
     package="${option.package.name}"> 
     <arg value="-Xcommons-lang" /> 
     <arg value="-Xcommons-lang:ToStringStyle=SHORT_PREFIX_STYLE" /> 
     <produces dir="${generated-src.dir}" includes="**/*.java" /> 
    </xjc> 
</target> 

Ora, questo funziona brillantemente per uno schema (ff.xsd in questo esempio). Come posso elaborare diversi schemi (ad esempio diversi file xsd)?

Ho provato ad avere un task ant per schema separato, ma in qualche modo, questo non funziona mentre Ant elabora la prima attività e poi dice che i "file sono aggiornati" per i seguenti schemi!

Qualche idea?

risposta

11
<target name="process-resources" description="Process resources"> 
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"/> 
    <xjc destdir="${basedir}/target/generated-sources/jaxb" 
     extension="true"> 
     <schema dir="src/main/xsd" 
       includes="JaxbBindings.xsd,CoreTypes.xsd"/> 
    </xjc> 
</target> 
+0

ah grande, esattamente quello che needed.Thanks! – dm76

3
<target name="generate-jaxb-code"> 
    <java classname="com.sun.tools.internal.xjc.XJCFacade"> 
      <arg value="-p" /> 
      <arg value="com.example"/> 
      <arg value="xsd/sample.xsd" /> 
    </java> 
</target> 

opere con la JAXB che fa parte del JDK 6 sembra che il compito ANT solo le navi con il JAXB scaricabile, ma dal momento che JAXB fa parte del JDK la sua probabilmente non è una buona idea prendere l'ultima release del JAXB e aggiungi al classpath del JDK poiché ciò significa che probabilmente devi fare i conti con le impostazioni del classloader, per raccogliere la versione scaricata piuttosto che la versione all'interno del JDK.

0

È anche possibile includere gli altri file XSD nel file XSD principale, usando un comando come il seguente:

<xs:include schemaLocation="path/to/secondschema.xsd"/> 
+0

Come compilare più xsds con questo target Ant? –

+0

@VinitGaikwad Penso che stavo dicendo che stai puntando sul tuo principale 'xsd', ma che il file principale' xsd' può avere annidato include direttive ad altri file 'xsd'. Ciò farebbe sì che JAXB elabori tutti i file nidificati 'xsd', anche se il livello più alto del tuo codice punta a un solo livello superiore' xsd'. Ma non l'ho fatto da un po ', quindi dovresti controllare i dettagli. – CodeMed

Problemi correlati