Validar XML contra XSD

Necesito validar un archivo XML con un archivo XSD dado. Simplemente necesito que el método devuelva verdadero si la validación fue buena o falsa en caso contrario.

Devuelve simplemente verdadero o falso (también no necesita ninguna biblioteca externa):

static boolean validateAgainstXSD(InputStream xml, InputStream xsd) { try { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new StreamSource(xsd)); Validator validator = schema.newValidator(); validator.validate(new StreamSource(xml)); return true; } catch(Exception ex) { return false; } } 
 public boolean validate() { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 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", "http://domain.com/mynamespace/mySchema.xsd"); Document doc = null; try { DocumentBuilder parser = factory.newDocumentBuilder(); doc = parser.parse("data.xml"); return true; } catch (Exception e) { return false; } } 

Esto puede depender de la biblioteca que utilice, pero buscar en Google con “cómo validar el archivo xml en Java” me dio estos resultados donde puede encontrar su respuesta:

primer resultado interesante

segundo resultado interesante

XMLUnit tiene algunas buenas clases para hacer esto, hay un ejemplo en su archivo README:

 Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI); v.setSchemaSources(Input.fromFile("local.xsd").build()); ValidationResult result = v.validateInstance(new StreamSource(new File("local.xml"))); return result.isValid();