miércoles, 18 de octubre de 2023

Rendición de Cuentas de contabilidad. XSD a Pojo Eclips. Validación XML sobre esquema

 0. Introducción

Hay que enviar las cuentas a la Sindicatura de Cuentas. Para ello hay que adjuntar un fichero xml en base a un esquema xsd.

1. Localizar el esquema xsd

Googleando he encontrado esta url: https://www.pap.hacienda.gob.es/ficherosxsd/



2. Obtener clases java (pojos) a partir de xsd.

Ver el tutorial de JavaWebTutor 

Vamos a Eclipse y cremos un "package" por ejmplo "ximo.otherapps.sical2". Apretando el boton derecho del ratón sobre dicho paquete  y New-Other


JAXB Classes from Schema


Seleccionamos el proyecto, luego seleccionamos el fichero del esquema, y le indicamos el paquete y no indicamos nada mas

Y la siguiente pantalla la aceptamos tal como está

También aceptamos la siguiente pantalla tal como está

Luego nos avis que se pueden perder los ficheros de dicha carpeta y le decimos que si.

Y en la consola nos sale:

parsing a schema...
compiling a schema...
ximo/xotherapps/sical2/ApliPpriaGastos.java
ximo/xotherapps/sical2/ApliPpriaIngresos.java
ximo/xotherapps/sical2/ArrFinOtrOperaValoracion.java
ximo/xotherapps/sical2/ColsBalance.java
ximo/xotherapps/sical2/ColsContrAdmin.java
ximo/xotherapps/sical2/ColsCuenta.java
ximo/xotherapps/sical2/ColsEstCambPatri.java
ximo/xotherapps/sical2/ColsEstFlujoEfec.java
ximo/xotherapps/sical2/ColsEstPatrimonio.java
ximo/xotherapps/sical2/ColsMemModCoste.java
ximo/xotherapps/sical2/ColsMemModReval.java
ximo/xotherapps/sical2/ConceptoNoPresupuestario.java
ximo/xotherapps/sical2/CuentaNorm.java
ximo/xotherapps/sical2/EjActYAnt.java
ximo/xotherapps/sical2/EjActYAntOpc.java
ximo/xotherapps/sical2/NatAct.java
ximo/xotherapps/sical2/ObjectFactory.java
ximo/xotherapps/sical2/package-info.java

Y observamos que se han generado las clases en nuestro paquete.

3. Validar XML en base a un esquema

Adjunto una clase que contiene el método ValidateXML


package ximo.xotherapps.utils.basic;

import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import javax.xml.validation.Schema;
import org.xml.sax.SAXException;
import java.io.IOException;
import javax.xml.transform.stream.StreamSource;


public class JAXBUtils{
	
	
  /**
   * 
   * @param xmlFile
   * @param schemaFile is relative from resource folder
   * @return
   */
   public static boolean validateXML(String xmlFile, String schemaFile) {
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = null;
        try {
            try {
            	schema = schemaFactory.newSchema(
            		new File(Thread.currentThread().getContextClassLoader().getResource(schemaFile).getPath()));
            } catch (Exception e1) {
            	schema = schemaFactory.newSchema(new File(schemaFile));
            }
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlFile)));
            return true;
            
        } catch (SAXException | IOException e) {
            e.printStackTrace();
            return false;
        }
    }
	
	
    public static void main (String[] args) {
	boolean ok=validateXML(
	"/home/ximo/contabilidad.xml",
	"/home/ximo/xsd/Cuenta-Norm-2019.xsd");

		
	if (ok) System.out.println("OK");
	else System.out.println("ERROR!");
    }

}	

4. Validador externo

En esta url: https://rendiciondecuentas.es/ValidacionExterior/home

Y llenamos los campos y seleccionamos el fichero y le damos a validar



Y en teroría el menos los efrrores estructurales no deberían aparecer (aunque los errores semánticos si que pueden haber)

5. Instrucciones de uso

Existe un pdf de instrucciones en la web del Consejo de Cuentas de Castilla y León.

No hay comentarios :

Publicar un comentario