Título: [JAXB] Generar xsd mediante schemagen Publicado por: K-YreX en 18 Diciembre 2020, 12:53 pm He tenido problemas para generar un schema xsd a partir de unas clases .java mediante el comando schemagen.
Tenía las siguientes clases (todas ellas en el mismo directorio . para simplificar): Código: ConjuntoVehiculos Código: schemagen -d . -cp *.java -encoding utf-8 Citar ConjuntoVehiculos.java:14: error: cannot find symbol Esa anotación @XmlElementRef la tengo junto a otras dos que hacen referencia a Vehiculo y Furgoneta y estas otras no producen ningún problema. He comprobado los nombres y está todo bien escrito.@XmlElementRef(name = "Coche", type = Coche.class), ^ symbol: class Coche location: class ConjuntoVehiculos He hecho varias pruebas incluyendo los ficheros .java uno por uno y compilándolos primero (aunque por lo que he visto, schemagen debe llamar internamente a javac para compilar los ficheros fuente) pero obtenía más errores y no me generaba el schema. Al final después de mucho probar me ha dado por compilar los ficheros .java (en el mismo directorio) y ejecutar: Código: schemagen -d . -cp . ConjuntoVehiculos.java -encoding utf-8 Espero que alguien conozca esta herramienta y pueda ayudarme. :-X PD: Estoy utilizando schemagen 3.0.0 (recientemente descargado junto con las otras herramientas de JAXB). Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: rub'n en 18 Diciembre 2020, 19:54 pm He tenido problemas para generar un schema xsd a partir de unas clases .java mediante el comando schemagen. Tenía las siguientes clases (todas ellas en el mismo directorio . para simplificar): Código: ConjuntoVehiculos Código: schemagen -d . -cp *.java -encoding utf-8 El el mismo directorio cual? original del proyecto? o en otra carpeta ? He hecho varias pruebas incluyendo los ficheros .java uno por uno y compilándolos primero (aunque por lo que he visto, schemagen debe llamar internamente a javac para compilar los ficheros fuente) pero obtenía más errores y no me generaba el schema. Tal cual doc asi mismo, es, cuando se compilan los .java estos pasan a ser .class que serán usados luego para crear los .xsd Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: K-YreX en 19 Diciembre 2020, 00:50 am El el mismo directorio cual? original del proyecto? o en otra carpeta ? Para simplificarlo y no tener que lidiar con los paquetes originales del proyecto lo que hice fue copiar todos los .java en un directorio llamémoslo CodigoFuente/ y modifiqué la sentencia package y los imports de los .java (es decir, los eliminé). El directorio en el que estaba trabajando tenía la siguiente estructura:Código: CodigoFuente/ Código: C:\...\CodigoFuente>schemagen -d . -cp *.java -encoding utf-8 Lo que me parece raro pues la clase Coche.java tiene prácticamente la misma estructura que Furgoneta.java (solo cambia algún atributo) y las anotaciones de ambas clases también son iguales. Me dio que pensar que quizás al pasar como argumento *.java se estuviesen compilando los ficheros en este orden: 1. Vehiculo.java -> Vehiculo.class 2. Furgoneta.java -> Furgoneta.class 3. ConjuntoVehiculos.java -> ConjuntoVehiculos.class 4. Coche.java -> Coche.class Y quizás por eso al compilar ConjuntoVehiculos.java no se reconoce el símbolo Coche.class (porque todavía no existe). Tal cual doc asi mismo, es, cuando compila los .java estos pasan a ser .class que sera usados luego para crear los .xsd Respecto a esto, noté que aunque schemagen compile los .java en .class, estos no aparecen en el directorio en el que se está trabajando (CodigoFuente/ en este supuesto). Por eso intenté compilarlos yo y tras varios intentos vi que la única forma en que funcionaba es teniendo todos los ficheros compilados ya y pasar a schemagen únicamente el .java que contiene a los demás. Es decir, teniendo:Código: CodigoFuente/ Código: C:\...\CodigoFuente>schemagen -d . -cp ConjuntoVehiculos.java -encoding utf-8 PD: Gracias por responder. Siendo un tema tan raro ya pensaba que no iba a tener respuestas. :-X Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: rub'n en 19 Diciembre 2020, 13:13 pm Y tu clases java como están?
Como usas la anotacion @XmlRootElement ? Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: K-YreX en 19 Diciembre 2020, 13:47 pm Fichero ConjuntoVehiculos.java
Código
Fichero Vehiculo.java Código
Fichero Coche.java Código
Fichero Furgoneta.java Código
Y el schema xsd que quiero obtener es: Código
Pero como no reconoce la clase Coche.class, me genera el siguiente xsd: Código
Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: rub'n en 21 Diciembre 2020, 18:02 pm que tal doc? que es la que hay?
quitale el Código a las superclases y avisa que tal... o sea a la superclase Vehiculo Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: K-YreX en 22 Diciembre 2020, 01:17 am que tal doc? que es la que hay? He probado el cambio que comentas y el resultado sigue sin ser satisfactorio. El error que aparecía sigue apareciendo y además ahora tampoco aparece el elemento Vehiculo en el xsd. quitale el Código a las superclases y avisa que tal... o sea a la superclase Vehiculo El resultado es el siguiente: Código
Título: Re: [JAXB] Generar xsd mediante schemagen Publicado por: rub'n en 22 Diciembre 2020, 09:04 am He probado el cambio que comentas y el resultado sigue sin ser satisfactorio. El error que aparecía sigue apareciendo y además ahora tampoco aparece el elemento Vehiculo en el xsd. El resultado es el siguiente: Código
Mmmm, bueno, mejor probare eso tambien, sin hablar tanto, ando con chamba bastante. si logras resolver antes genial. |