2009-12-17 8 views
9

estoy usando jaxb para generar clase de objeto Java desde esquemas XML dentro de un script Ant así:¿Cómo puedo procesar múltiples shemas xsd usando jaxb y la tarea 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> 

Ahora bien, esto funciona muy bien para un esquema (ff.xsd en este ejemplo). ¿Cómo puedo procesar varios esquemas (es decir, varios archivos xsd)?

Intenté tener una tarea ant por esquema por separado, pero de alguna manera, esto no funciona porque Ant procesa la primera tarea y luego dice que los "archivos están actualizados" para los siguientes esquemas.

¿Alguna idea?

Respuesta

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, exactamente lo que 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> 

obras con el JAXB que forma parte de JDK 6 parece que la tarea ANT sólo se suministra con el JAXB descargable pero desde JAXB es parte del JDK su probablemente no es una buena idea para tener la última versión de JAXB y añádelo a la ruta de clase del JDK, ya que eso significa que probablemente deba perder el tiempo con la configuración del cargador de clases, para recuperar la versión descargada en lugar de la versión dentro del JDK.

0

también puede simplemente incluir los otros archivos XSD en el archivo xsd principal, usando un comando como el siguiente:

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

¿Cómo compilar múltiples xsds con este objetivo Ant? –

+0

@VinitGaikwad Creo que estaba diciendo que apuntas a tu 'xsd' principal, pero que el archivo' xsd' principal puede tener anidadas directivas de inclusión en otros archivos 'xsd'. Esto haría que JAXB procesara todos los archivos 'xsd' anidados, aunque el nivel superior de su código apunta a un solo nivel superior' xsd'. Pero no he hecho esto desde hace tiempo, por lo que tendrías que verificar los detalles. – CodeMed

Cuestiones relacionadas