Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/01/2008, 03:04
galileo1980
 
Fecha de Ingreso: diciembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Pregunta Re: java captura excepciones xml contra xsd

Hola!

El siguiente código Java lo utilizo para validar documentos XML:

public static boolean validarXMLvsXSD(String sFichXml, String sFichXsd){
boolean bIsXmlOk = false;
String YES = "yes";
String NO = "no";
String CHAR_ENCODING = "UTF8";
boolean NAME_SPACE_AWARE = true;
boolean VALIDATING = true;
String SCHEMA_LANGUAGE ="http://java.sun.com/xml/jaxp/properties/schemaLanguage";
String SCHEMA_LANGUAGE_VAL = "http://www.w3.org/2001/XMLSchema";
String SCHEMA_SOURCE ="http://java.sun.com/xml/jaxp/properties/schemaSource";

try {
Reader xmlReader;
Reader xsdReader;

xmlReader = new FileReader(sFichXml);
xsdReader = new FileReader(sFichXsd);

SAXParserFactory factory = SAXParserFactory.newInstance();

// Configure SAXParserFactory to provide parsers that are namespace aware.
factory.setNamespaceAware(NAME_SPACE_AWARE);
// Configure SAXParserFactory to provide parsers that are validating. This
// property
// must have the value true for any of the property strings defined below to
// take
// effect.
factory.setValidating(VALIDATING);

SAXParser parser = factory.newSAXParser();

// Setting the schema language for xml schema validation
parser.setProperty(SCHEMA_LANGUAGE, SCHEMA_LANGUAGE_VAL);
// Setting the schema source for xml schema validation
parser.setProperty(SCHEMA_SOURCE, new InputSource(xsdReader));

DefaultHandler handler = new XmlDefaultHandler();
parser.parse(new InputSource(xmlReader), handler);

// si procesa todo el metodo sin producir excepcion, el fichero xml
// es correcto.
bIsXmlOk = true;
}
catch (FactoryConfigurationError e) {
System.out.println(e.toString());
}
catch (ParserConfigurationException e) {
System.out.println(e.toString());
}
catch (SAXException e) {
System.out.println(e.toString());
}
catch (IOException e) {
System.out.println(e.toString());
}

return bIsXmlOk;
}// Fin de validarXMLvsXSD


public static class XmlDefaultHandler extends DefaultHandler {
/**
* @see org.xml.sax.ErrorHandler#error(SAXParseException)
*/
public void error(SAXParseException spe) throws SAXException {
throw spe;
}

/**
* @see org.xml.sax.ErrorHandler#fatalError(SAXParseExcept ion)
*/
public void fatalError(SAXParseException spe) throws SAXException {
throw spe;
}

}// Fin de XmlDefaultHandler

Pero me surge el problema de que me da el error siguiente:
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the
name 'xml:base' to a(n) 'attribute declaration' component.

Creo que se origina porque el XML que quiero validar contiene en la cabecera más de un XSD referenciado, es decir, creo que lo tengo que validar con varios XSD.

Estoy en lo ciero o me equivoco??

Muchas gracias y un saludo.