Foros del Web » Programación para mayores de 30 ;) » Java »

java captura excepciones xml contra xsd

Estas en el tema de java captura excepciones xml contra xsd en el foro de Java en Foros del Web. Hola, Mi problema es que en eclipse valido un documento xml contra un xsd utilizando un programa en java para que me muestre si el ...
  #1 (permalink)  
Antiguo 15/11/2007, 08:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 24
Antigüedad: 16 años, 5 meses
Puntos: 1
Pregunta java captura excepciones xml contra xsd

Hola,

Mi problema es que en eclipse valido un documento xml contra un xsd utilizando un programa en java para que me muestre si el xml es válido respecto al xsd o si no, el caso, es que me funiciona, pero no como quiero, cada vez que lo ejecuto me dice un error del xml... es decir que si el xml de entrada tiene 5 errores respecto a su xsd validador, tengo que lanzar el programa 5 veces para notificar de los 5 errores, Necesito poder hacerlo todo de una vez, es decir que de una pasada me diga que elementos o que atributos o lo que sea no estan conforme con el xsd.

¿Alguna idea?

Gracias.
  #2 (permalink)  
Antiguo 17/01/2008, 03:04
 
Fecha de Ingreso: diciembre-2007
Mensajes: 10
Antigüedad: 16 años, 4 meses
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:28.