2012-06-08 11 views
8

Tengo un archivo xml creado usando jaxb. Necesito validarlo contra un documento xsd. ¿Es posible hacer la validación sin descalificación? Necesito luego imprimir los errores en el archivo xml.Validar xml creado usando jaxb contra un archivo xsd

+0

Una de las principales ventajas de generar un código de enlace de xsd y luego usar el código para crear un xml de instancia es generar un xml válido y bien formado. No estoy seguro de por qué quieres validarlo de nuevo? –

+1

Puede establecer Schema y ValidationEventHandler en el Marshaller. Validará contra el esquema durante la clasificación. Consulte http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#setSchema(javax.xml.validation.Schema) – Ritesh

Respuesta

10

Sí, puede usar el validador que se encuentra en Java desde 1.5. aquí está la referencia doc

Además de esto, puede usar la API basada en dom o en flujo para validar su documento XML contra el archivo xsd. Si desea utilizar la API SAX para su tarea, entonces, escuchar es el ejemplo:

try { 
    String schemaLang = "http://www.w3.org/2001/XMLSchema"; 

    SchemaFactory factory = SchemaFactory.newInstance(schemaLang); 

    Schema schema = factory.newSchema(new StreamSource("sample.xsd")); 
    Validator validator = schema.newValidator(); 

    validator.validate(new StreamSource("test.xml")); 

} catch (SAXException e) { 
    System.out.println(" sax exception :" + e.getMessage()); 
} catch (Exception ex) { 
    System.out.println("excep :" + ex.getMessage()); 
} 

contrario, puede utilizar DOM, DOM4J o API XOM. Para mayor referencia, puede ver here.

También hay un answer relacionado en stackoverflow.

+1

Puede validar también antes de la clasificación: fuente de JAXBSource = nuevo JAXBSource (jaxbContext, objectBeingMarshalled); \t \t validator.validate (fuente); – Ritesh

+0

obtengo esta excepción sax de excepción: el objetivo de instrucción de procesamiento que coincide con "[xX] [mM] [lL]" no está permitido. – AutoMEta

+0

significa que en el inicio de XML tiene espacio, elimina espacio o cualquier otra cosa al comienzo de su XML, siga el enlace: http: //gonithethinker.blogspot.com/2012/06/processing-instruction-target-matching .html @AutoMeta – Forhad

Cuestiones relacionadas