¿Cómo puedo validar documentos XML durante una compilación Maven contra un DTD o un Esquema XSD?XML DTD/Esquema de la validación en Maven
Respuesta
Hay un xml-maven-plugin que puede verificar si los archivos XML son matching an XML schema pero no creo que pueda generar informes.
El validate goal del xml-maven-plugin comprobará la buena formación y opcionalmente validará con un esquema. La compilación fallará si la validación falla.
El complemento no genera ningún informe, ¿qué le gustaría en un informe que le interese? información sobre los archivos no válidos?
Aquí hay un ejemplo de uso:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<validationSets>
<validationSet>
<dir>src/main/xsd</dir>
<systemId>src/main/xmlschema.xml</systemId>
</validationSet>
</validationSets>
</configuration>
</plugin>
He utilizado el xml-maven-plugin durante algún tiempo (gracias a Pascal Thivent y Rick Seller por introducirme en esto), pero tuvo algunos problemas con él.
Estaba validando un documento XML. En algún momento dividimos el documento XML en dos archivos, ambos en su propio subdirectorio. En ese momento, el complemento xml-maven ya no validaba nada porque el archivo se había movido, pero tampoco se quejaba al respecto. También personalmente encontré que la configuración no es demasiado intuitiva y es un poco difícil de depurar si no lo hace.
Así que, para mí, me alegré de redescubrir la tarea Ant schemavalidate combinada con maven-antrun-plugin. Hice todo lo que necesitaba y más.
En el siguiente ejemplo verifico que los archivos están realmente seleccionados. Por supuesto, puede adaptar esto para sus necesidades específicas. Como una ventaja (un poco fuera de tema) un ejemplo de cómo agarro la ruta de un xsd que se descarga como una dependencia.
<build>
<plugins>
<plugin><groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId><version>1.8</version>
<executions><execution>
<id>validate-xml-document-files-against-schema</id>
<phase>test</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<copy file="${maven.dependency.com.mycompany.some-schema.xsd.path}" tofile="${xml-validation-dir}/some-schema.xsd" />
<resourcecount property="xml.count">
<fileset dir="${xml-validation-dir}" includes="**/*.xml" />
</resourcecount>
<fail message="fileset does not match any xml file (use same fileset for actual validation)">
<condition><equals arg1="${xml.count}" arg2="0" /></condition>
</fail>
<echo message="validating ${xml.count} xml files against some-schema" />
<schemavalidate>
<schema namespace="http://mycompany.com/some-namespace" file="${xml-validation-dir}/some-schema.xsd" />
<fileset dir="${xml-validation-dir}" includes="**/*.xml" />
</schemavalidate>
<echo message="all ${xml.count} xml documents are valid" />
</target>
</configuration>
</execution></executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>some-schema-artifact</artifactId>
<version>1.2.3</version>
<type>xsd</type>
</dependency>
</dependencies>
Por supuesto, esto no encaja realmente en el modo experto de trabajar, pero funcionó para mí y tal vez alguien más es ayudado por conocer esta opción.
- 1. Deshabilitar la validación XML en Eclipse
- 2. validación de esquema XML
- 3. Validación completa del esquema XML
- 4. Validación XML con Schematron/XSD en C#
- 5. realizando validación xml contra xsd
- 6. Validación de esquema XML de XElement
- 7. validación javax.xml.crypto.dsig usando la clave pública en el xml
- 8. La validación del esquema Xml falla con MemoryStream en C#
- 9. Validación de Xml con el esquema XSD
- 10. Validación de esquema XML con RelaxNG
- 11. Validación de XML - Usar múltiples xsd's
- 12. appengine-web.xml - Error de validación XML
- 13. ¿Inhabilita la validación de Visual Studio de archivos que no son xml que parecen xml?
- 14. ¿Validación del esquema XML síncrono? .NET 3.5
- 15. Validación de XML contra una DTD en Javascript?
- 16. Java, xml, XSLT: Impedir DTD-Validación
- 17. Herramienta para la validación del esquema XML XSD
- 18. Symfony 2 carga la validación xml del paquete
- 19. La validación de PHP XML arroja excepciones fatales cuando pasaba mal XML
- 20. eclipse en maven advertencia de proyecto 'Esquema DTD o XML'
- 21. Validación XML contra una DTD dada en PHP
- 22. Programar de forma automática qué nodo de un documento XML provocó la falla de la validación de su esquema XML
- 23. Validación XML en Java: processContents = "laxa" parece no funcionar correctamente
- 24. Validación Java xsd de xml sin espacio de nombres
- 25. ¿Hay alguna manera de hacer la validación XSD de una secuencia XML en PHP
- 26. Validación de esquema XML: cvc-complex-type.2.4.a
- 27. Validación XML utilizando XSD con el patrón de expresión regular
- 28. ¿Cómo usar la validación de Struts2 para la validación condicional?
- 29. NoClassDefFoundError en la dependencia de Maven
- 30. Web.xml error de validación
Sí, los informes de errores de validación ayudarán a señalar posibles errores en los archivos xml como PMD o Findbug para el código de Java. Me he dado cuenta de que muchos desarrolladores omiten los errores/advertencias de validación xml o jsp mientras trabajan con el proyecto, lo que puede causar posibles errores de tiempo de ejecución. – cetnar
De acuerdo. No es tan útil para simplemente fallar la compilación, sino para fallar la compilación e imprimir el error de validación del esquema ... ahora eso es súper útil. Especialmente si solo usa IDEs cuando necesita depurar algo. – avgvstvs