Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Como validar la estructura de un Comprobante fiscal Digital usando el esquema cfv2.xsd

De las pocas cosas que me gustan de java… esta su parser SAX…..que tambien valida esquemas….


import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Document;

public class ValidateXmlWithSchema{

	public boolean validate(String file_path){

		boolean valor_retono = true;

		final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
	    final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
		final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
		final String MY_SCHEMA = new OsVars().getSchemaDir() + "cfdv2.xsd";
		final String MY_XML= file_path;

		// Creando la factoria e indicando que hay validacion
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		documentBuilderFactory.setNamespaceAware(true);
		documentBuilderFactory.setValidating(true);

		try {

			//Configurando el Schema de validacion
			documentBuilderFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
			documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, new File(MY_SCHEMA));
			// Parseando el documento
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			documentBuilder.setErrorHandler(new ParserErrorHandler());

			@SuppressWarnings("unused")
			Document parse = documentBuilder.parse(new File(MY_XML));

		} catch (SAXException saxEx){
			valor_retono =  false;
			System.out.println(saxEx.toString());
		} catch (Exception ex) {
			valor_retono =  false;
			System.out.println(ex.toString());
		}

		return valor_retono;
	}

	private class ParserErrorHandler extends DefaultHandler {

		@Override
		public void warning(SAXParseException e) throws SAXException {
			System.out.println("Warning: ");
			printInfo(e);
		}

		@Override
		public void error(SAXParseException e) throws SAXException {
			System.out.println("Error: ");
			printInfo(e);
		}

		@Override
		public void fatalError(SAXParseException e) throws SAXException {
			System.out.println("Error Fatal: ");
			printInfo(e);
		}
		private void printInfo(SAXParseException e) {
			System.out.println("   Publico ID: "+e.getPublicId());
			System.out.println("   Sistema ID: "+e.getSystemId());
			System.out.println("   Linea numero: "+e.getLineNumber());
			System.out.println("   Columna number: "+e.getColumnNumber());
			System.out.println("   Mensaje: "+e.getMessage());
		}
	}

}

Comenta