Pregunta

El escenario es el siguiente: Tengo un paquete Java ( MyApp.Config ) que contiene todas mis clases anotadas por Jaxb, de las cuales me gustaría generar un archivo de esquema XML. En el paquete, también hay un archivo Package-Info.Java , que contiene la anotación @xmlschema en el elemento de paquete, por lo tanto, válido en todo el paquete:

@XmlSchema(namespace="http://myapp/config",
           xmlns = @XmlNs(prefix="myapp", namespaceURI="http://myapp/config"),
           elementFormDefault=XmlNsForm.QUALIFIED)
package myapp.config;

Cuando ejecuto la herramienta de línea de comandos Schemagen que viene con el JDK,

D:\Projects\Myapp>"%JAVA_HOME%/bin/schemagen" -cp "%JAVA_HOME%/lib/tools.jar"
src/myapp/config/*.java

Obtengo el resultado correcto: el elemento raíz en el archivo generado esquema1.xsd contiene el TargetNamesPace y otros atributos necesarios:

<xs:schema elementFormDefault="qualified" version="1.0"
           targetNamespace="http://myapp/config"
           xmlns:tns="http://myapp/config"
           xmlns:myapp="http://myapp/config">
           xmlns:xs="http://www.w3.org/2001/XMLSchema" >

Sin embargo, cuando quiero realizar la misma tarea dentro de mi script de hormiga,

<schemagen srcdir="src/myapp/config" destdir="dist">
    <include name="*.java"/>
</schemagen>

La herramienta Schemagen parece ignorar completamente las anotaciones de espacio de nombres, porque en el archivo esquema1.xsd , no hay rastro de ellos:

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

Cuando ejecuto la tarea Schemagen en verbose y debug , se vuelve obvio que la herramienta carga todo lo . Java Archivos, excepto Package-info.java , por eso no sabe nada sobre los espacios de nombres.

¿Has cumplido con este comportamiento extraño antes? ¿Por qué la herramienta de línea de comandos procesa el archivo de información del paquete y la tarea de hormiga no? ¿Qué debo hacer para hacer el trabajo de tareas de hormigas?

gracias de antemano,
buc

¿Fue útil?

Solución

Fortunately I found the solution, I post it for those who run into the same problem in the future:

The reason it did not work is that I called the schemagen task in the wrong way (this can happen, if there is so little documentation or examples as in the case of schemagen). Instead of writing:

<schemagen srcdir="src/myapp/config" destdir="dist">
    <include name="*.java"/>
</schemagen>

You should move the specific part of the path into the include element:

<schemagen srcdir="src" destdir="dist">
    <include name="myapp/config/*.java"/>
</schemagen>

I'm still not sure why this is happening, but this way, the schemagen processor recognizes that the myapp/config directory in fact designates the java package myapp.config and by knowing that it is a package, it will also read the package info file.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top