1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.bind.ValidationEvent;
import javax.xml.bind.helpers.ValidationEventImpl;
import javax.xml.bind.helpers.ValidationEventLocatorImpl;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
/**
* @author moi
*
*/
public class XmlXsdValidator {
private static final File XSD_FILE = new File("D:/Flux/fluxGlobal.xsd");
private static final File XML_FILE = new File("D:/Flux/exemple_xml_AC.xml");
/*
* (non-Javadoc)
*
* @see javax.xml.bind.ValidationEventHandler#handleEvent(javax.xml.bind.
* ValidationEvent)
*/
public ValidationEvent validation() {
// Instanciation du conteneur de retour
ValidationEvent event = null;
// 1. Validation du format W3C XML
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// 2. Compile le format XSD.
Schema schema;
try {
schema = factory.newSchema(new StreamSource(XSD_FILE));
// 3. Instancie un validateur à partir du format XSD.
Validator validator = schema.newValidator();
// 4. Validation du XML
validator.validate(new StreamSource(XML_FILE));
} catch (SAXException e) {
event = new ValidationEventImpl(ValidationEvent.ERROR, e.getMessage(), new ValidationEventLocatorImpl(e));
} catch (IOException e) {
// Cas ou la XSD ou le XML n'est pas trouvé
System.out.println(e.getMessage());
}
return event;
}
public void gestionErreur(ValidationEvent event) {
System.out.println("\nEVENT");
System.out.println("SEVERITY: " + event.getSeverity());
System.out.println("MESSAGE: " + event.getMessage());
System.out.println("LINKED EXCEPTION: " + event.getLinkedException());
System.out.println("LOCATOR");
System.out.println(" LINE NUMBER: "
+ event.getLocator().getLineNumber());
System.out.println(" COLUMN NUMBER: "
+ event.getLocator().getColumnNumber());
System.out.println(" OFFSET: " + event.getLocator().getOffset());
System.out.println(" OBJECT: " + event.getLocator().getObject());
System.out.println(" NODE: " + event.getLocator().getNode());
System.out.println(" URL: " + event.getLocator().getURL());
// Insertion de l'anomalie dans la table des rejets
// INSERT REJECT
// (fichier de configuration à externaliser)
}
/**
* @param args
*/
public static void main(String[] args) {
// declaration d'un objet validator
XmlXsdValidator validator = new XmlXsdValidator();
//
ValidationEvent eventRetourne = validator.validation();
if (eventRetourne != null) {
// Lancement de la validation, et si validation incorrect insertion
// en
// base.
validator.gestionErreur(eventRetourne);
}
}
} |
Partager