2012-06-08 8 views
8

Ich habe eine XML-Datei mit Jaxb erstellt. Ich muss es gegen ein xsd-Dokument validieren. Ist es möglich, einfach eine Validierung durchzuführen, ohne das Programm zu munmarsieren? Ich muss dann die Fehler in der XML-Datei drucken.Validate XML erstellt mit Jaxb gegen eine Xsd-Datei

+0

Einer der Hauptvorteile des Generierens eines Bindungscodes aus xsd und des anschließenden Verwendens des Codes zum Erstellen eines Instanz-XML ist die Ausgabe eines gültigen und wohlgeformten XML. Ich bin mir nicht sicher, warum Sie es erneut validieren möchten? –

+1

Sie können Schema und ValidationEventHandler für den Marshaller selbst festlegen. Es wird beim Marshalling gegen das Schema validiert. Siehe http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#setSchema(javax.xml.validation.Schema) – Ritesh

Antwort

10

Ja, Sie können Validator in Java von 1.5 gefunden. Hier ist die Referenz doc

Abgesehen davon können Sie Dom-basierte oder Stream-basierte API verwenden, um Ihr XML-Dokument gegen Xsd-Datei zu überprüfen. Wenn Sie SAX API für Ihre Aufgabe verwenden, dann hören ist das Beispiel:

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()); 
} 

Ansonsten können Sie verwenden, DOM, DOM4J oder XOM-API. Für weitere Referenz sehen Sie here.

Es gibt eine verwandte answer in stackoverflow auch.

+1

Sie können auch vor dem Marshalling validieren: JAXBSource-Quelle = neue JAXBSource (jaxbContext, objectBeingMarshalled); \t \t validator.validate (Quelle); – Ritesh

+0

Ich bekomme diese Exception Sax Ausnahme: Die Verarbeitung Anweisung Ziel Übereinstimmung "[xX] [mM] [lL]" ist nicht erlaubt. – AutoMEta

+0

bedeutet dies, dass in Ihrem XML-Startplatz etwas Platz vorhanden ist, Leerzeichen oder etwas anderes zu Beginn Ihrer XML-Datei entfernt wird. Folgen Sie dem Link: http: //gonithethinker.blogspot.com/2012/06/processing-instruction-target-matching .html @AutoMeta – Forhad