Eu tenho um código que depende de um arquivo XSD fora do jar para validar um arquivo XML, mas parece que ele não encontra o arquivo XSD.]
O arquivo XML é codificado a mão:
builder.append( "<iso_10303_28 xmlns:xsi=\"http://www.w3.org/2001" );
builder.append( "/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=" );
builder.append( "\"EsquemaSTEP.xsd\"" );
builder.append( " representation_category=\"ETEB\"" );
builder.append( ">\n" );
Na saída fica assim:
<?xml version="1.0" encoding="UTF-8"?>
<iso_10303_28 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EsquemaSTEP.xsd" representation_category="ETEB">
O código de validação é:
factory.setValidating(validate);
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
ErrorHandler errorHandler = new ErrorHandler(){
public void warning(SAXParseException e) {
ArquivoDebug debug = ArquivoDebug.getArquivoDebug( "Debug\problemasXML.txt" );
debug.writeBytes( "Linha: " + e.getLineNumber() + " Coluna: " + e.getColumnNumber() + "\n" );
debug.writeBytes( "Warning!\n" + e.getMessage() + "\n" );
}
public void error(SAXParseException e1) {
ArquivoDebug debug = ArquivoDebug.getArquivoDebug( "Debug\problemasXML.txt" );
debug.writeBytes( "Linha: " + e1.getLineNumber() + " Coluna: " + e1.getColumnNumber() + "\n" );
debug.writeBytes( "Error!\n" + e1.getMessage() + "\n" );
}
public void fatalError(SAXParseException e2) {
ArquivoDebug debug = ArquivoDebug.getArquivoDebug( "Debug\problemasXML.txt" );
debug.writeBytes( "Linha: " + e2.getLineNumber() + " Coluna: " + e2.getColumnNumber() + "\n" );
debug.writeBytes( "Fatal error!\n" + e2.getMessage() + "\n" );
}
};
builder.setErrorHandler(errorHandler);
return builder.parse(inStream) != null;
E a mensagem de erro no debug, resultado da exceção:
Se alguém puder me ajudar eu agradeceria muito.