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());
}
}
}
