Bonsoir,

J'extrais des données depuis une base de données hierarchique structurée en xml. Pour ce faire j'utilise le langage xquery ainsi que l'API SAX pour parser le résultat obtenu. Malheureusement, ma requête échoue sans que j'en comprenne la raison et lève une java.lang.reflect.InvocationTargetException !

En outre, j'ai réalisé une deuxième requête qui fonctionne correctement et ne génère donc aucune erreur. Les structures des deux requêtes sont pourtant identiques, mais la deuxième se déroule normalement si je commente la première.

Dans le code ci-dessous :
- en rouge le code qui lève la java.lang.reflect.InvocationTargetException
- en bleu la 2ème requête qui s'exécute normalement
- les 'XXX' pour masquer le nom réel des méthodes
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
// recuperation des noms des domaines
		StringBuffer domaineXquery = new StringBuffer();
		domaineXquery.append("{for $domaine in input()/Domaine return ($domaine/");
		domaineXquery.append(Config.getIdXXX());
		domaineXquery.append(", $domaine/");
		domaineXquery.append(Config.getIdXXX());
		domaineXquery.append(")}");
		InputSource domaineInputSource = this.requester.xqueryAsSAX(domaineXquery.toString());	 
		
		// récupération des familles et sous-familles
		StringBuffer famillesXquery = new StringBuffer("<Famille> ");
		famillesXquery.append("{for $q in input()/");
		famillesXquery.append(Config.getFamilleXXX());
		famillesXquery.append(" return $q}");
		famillesXquery.append(" </Famille>");
		InputSource familleInputSource = this.requester.xqueryAsSAX(famillesXquery.toString());
		
		ParserAdapter familleParserAdapter;
		try {
			familleParserAdapter = new ParserAdapter();
			familleParserAdapter.setContentHandler(new FamilleContentHandler());		      
			familleParserAdapter.parse(familleInputSource);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}