example - XML con XSD JAVA
validate xsd java example (4)
Se me ha asignado un trabajo para validar un XML contra un XSD y, si todo pasa, analizará el XML para que pueda importarlo a mi sistema.
Mi Qyestion es la mejor forma de validar un XML contra el XSD y cuál es la mejor API para analizar XML en mi objeto de dominio.
Buscando sugerencias valiosas
JAXB es la biblioteca de análisis XML estándar de Java: http://www.oracle.com/technetwork/articles/javase/index-140168.html . Viene incluido con Java SE 6.
Eche un vistazo al tutorial . Es fácil registrar un archivo de esquema con su Unmarshaler / Marshaler y validarlo .
Parte 1 - Validar XML
Puede usar las API javax.xml.validation para esto.
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaURL = // The URL to your XML Schema;
Schema schema = sf.newSchema(schemaURL);
Validator validator = schema.newValidator();
validator.validate(xml);
Parte 2 - OXM
Con respecto a la segunda parte de su pregunta, la mejor API para analizar XML en el objeto de dominio es JAXB. JAXB es una especificación con múltiples implementaciones. Dirijo la implementación de MOXy JAXB que contiene extensiones útiles, como el mapeo basado en XPath .
Siempre puedes hacer la validación durante la conversión de XML a objetos:
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Umarshaller unmarshaller = jc.createUnmarshaller();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaURL = // The URL to your XML Schema;
Schema schema = sf.newSchema(schemaURL);
unmarshaller.setSchema(schema);
Customer customer = (Customer) unmarshaller.unmarshal(xml);
Puede usar analizadores DOM o SAX para estas operaciones.
EDITAR Aquí algunos ejemplos con Sax Prsing
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SAXParser parser = factory.newSAXParser();
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new ErrorHandler(){
public void warning(SAXParseException e) throws SAXException {
System.out.println(e.getMessage());
}
public void error(SAXParseException e) throws SAXException {
System.out.println(e.getMessage());
}
public void fatalError(SAXParseException e) throws SAXException {
System.out.println(e.getMessage());
}
});
reader.parse(new InputSource("document.xml"));
(Tomé la fuente desde aquí )
Puede usar Castor, que genera clases Java para su XSD. Entonces puede convertir su XML a objetos y viceversa en pocas líneas de código.