Estou validando o XML da Nfe a partir do schema, mas não consigo fazer ele pegar as mensagens de erro que estão nos schemas, ele retorna as mensagens de erros padrão, que não adiantam muito…
Abaixo segue o código que estou utilizando:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
System.out.println("DocumentBuilderFactory: "+ factory.getClass().getName());
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", ".....nfe_v2.00.xsd");
DocumentBuilder builder = null;
try
{
builder = factory.newDocumentBuilder();
builder.setErrorHandler( new SimpleErrorHandler());
} catch (ParserConfigurationException ex)
{
ex.printStackTrace();
}
org.w3c.dom.Document document;
try
{
document = builder.parse("....nfe.xml");
org.w3c.dom.Node rootNode = document.getFirstChild();
System.out.println("Root node: "+ rootNode.getNodeName() );
} catch (IOException ex) {
ex.printStackTrace();
} catch (SAXException ex) {
ex.printStackTrace();
}
Classe que retorna os erros:
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXParseException;
public class SimpleErrorHandler implements ErrorHandler{
public void error(SAXParseException exception) {
System.out.println("error: "+ exception.getMessage());
}
public void fatalError(SAXParseException exception) {
System.out.println("fatalError: "+ exception.getMessage());
}
public void warning(SAXParseException exception) {
System.out.println("warning: "+ exception.getMessage());
}
}