Bonjour à tous,
Je suis en train de faire un programme tout simple (en fait pas si simple que ça pour moi), qui valide un XMl par rapport à sa XSD associée.

Ca marche pas trop mal, seulement, lorsqu'une erreur est trouvée, je n'ai pas les descriptions de ces erreurs.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
		}
 
	}
 
}
Voici le message d'erreur incomplet :

SEVERITY: 1
MESSAGE: cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'.
LINKED EXCEPTION: null
LOCATOR
LINE NUMBER: -1
COLUMN NUMBER: -1
OFFSET: -1
OBJECT: org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'.
NODE: null
URL: null


Comme vous pouvez le voir, l'exception ne me renvoie pas la balise qui est en erreur ou autre. Merci d'avance