Salut a tous,

Je voulais vous présenter un beau modèle de problème conceptuel, je suppose (groos sigh!) .
Voici, j'ai créer une classe pour regrouper toutes mes requêtes xquery sur une (et une seule base exist-db , c-a-d xml ). Voici comment elle se présente:
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
Class xqueryBP {
	public $db;
 
	function __construct() {
		//	création d'une instance EXIST
		$db2 = new eXist (EXIST_PATH,EXIST_SERVER,EXIST_PORT);
		$db2->setCredentials (EXIST_USER,EXIST_PASSWORD);
		$db2->setParamIndent (false);
		//	Pour le debugage
		$db2->setDebug(DEBUG);
		$this->db=$db2;		
	}
 
	/**
	 * Retourne le fragment tei définit par sa cote et son numéro d'ordre
	 *
	 * @param string 	$doc			cote de la page ou se trouve le fragment
	 * @param int		$num_frag		N° d'ordre du fragment dans la page
	 * @return string	chaine XML contenant le fragment
	 */
	public function getFragmentCoteNo($doc, $num_frag) {
		$_XQUERY1 = 'declare namespace dbp="http://blabla/ns/1.0";
			let $doc := doc("'.COLLECTION.'/'.$doc.'")
			for $fragment in $doc//*:div[@*:type="fragment"]|$doc//*:item[@*:type="fragment"] 
			let $bibl := data($fragment/*:cit/*:bibl)
			let $lbl_head := $fragment/parent::*/*:head//*:term
			let $lbl_list := $fragment/parent::*:list/parent::*:item/preceding-sibling::*:label[1]//*:term
			let $lbl_prec := $fragment/preceding-sibling::*:label[1]//*:term|$fragment/preceding-sibling::*:div[@*:type="label"]//*:term
			let $quote := data($fragment/*:cit/*:quote) where $fragment[@n="'.$num_frag.'"]
				return <item>
							<head>{$lbl_head}</head>
							<label_list>{$lbl_list}</label_list>
							<label>{$lbl_prec}</label>
							<fragment>{$quote}</fragment>
							<bibl>{$bibl}</bibl>
						</item>';
		$result1 = $this->db->executeQuery($_XQUERY1);
		return $this->db->retrieve($result1, 0);		
	}
}
Pour info, la requête est bonne; si je l'affiche j'ai :
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
declare namespace dbp="http://blabla/ns/1.0";
			let $doc := doc("/db/ma_base/g226_3_f_015__r____-ver3.xml")
			for $fragment in $doc//*:div[@*:type="fragment"]|$doc//*:item[@*:type="fragment"] 
			let $bibl := data($fragment/*:cit/*:bibl)
			let $lbl_head := $fragment/parent::*/*:head//*:term
			let $lbl_list := $fragment/parent::*:list/parent::*:item/preceding-sibling::*:label[1]//*:term
			let $lbl_prec := $fragment/preceding-sibling::*:label[1]//*:term|$fragment/preceding-sibling::*:div[@*:type="label"]//*:term
			let $quote := data($fragment/*:cit/*:quote) where $fragment[@n="1"]
				return <item>
							<head>{$lbl_head}</head>
							<label_list>{$lbl_list}</label_list>
							<label>{$lbl_prec}</label>
							<fragment>{$quote}</fragment>
							<bibl>{$bibl}</bibl>
						</item>
Jusqu'à maintenant, cette classe ne m'avait pas posé de problème, et la méthode définit plus haut fonctionne correctement partout où je l'ai utilisée.

Par contre dans la page ci-dessous elle génère une erreur et plante:
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
$nb_fragments=$label_en_cours->getNbFragmentsAssociesDansBdd();
		$num_fragment=0;
		$xml=null;
		$affichage_possible=true;
		while ($num_fragment < $nb_fragments) {
			$fragment_en_cours = $label_en_cours->getFragment($num_fragment);
			//	definition de la cote et du numéro de fragment
			$ref_bib_doc = $fragment_en_cours->fragment->getCote();	$ref_bib_num_frag=$fragment_en_cours->fragment->getNumeroFragment();
			$affichage_possible=true;
			if (($ref_bib_doc=='') || ($ref_bib_num_frag=='')) {
				$affichage_possible=false;
			}
			else {
				$ref_bib_doc .= '-ver3.xml';
				$fragment='';
html::dbg('ref_bib_doc='.$ref_bib_doc.'<br/>ref_bib_num_frag='.$ref_bib_num_frag);
				$db_xml = new xqueryBP();
		$fragment=$db_xml->getFragmentCoteNo($ref_bib_doc, $ref_bib_num_frag);
//....affiche le résultat de la méthode ci-dessus, enfin normalement
}
}
En fait, sur cette page la méthode plante et le message retourné par Exist est :
---GOT---
HTTP/1.1 200 OK
Date: Wed, 18 Jan 2012 09:53:28 GMT
Server: Jetty/5.1.12 (Linux/2.6.24-30-server amd64 java/1.6.0_18
Content-Length: 363
Content-Type: text/xml
Connection: close

<?xml version="1.0" encoding="UTF-8"?><methodResponse xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions"><fault><value><struct><member><name>faultCode</name><value><i4>0</i4></value></member><member><name>faultString</name><value>No method matching arguments: java.lang.String, java.lang.String</value></member></struct></value></fault></methodResponse>
---END---

HEADER: HTTP/1.1 200 OK
HEADER: Date: Wed, 18 Jan 2012 09:53:28 GMT
HEADER: Server: Jetty/5.1.12 (Linux/2.6.24-30-server amd64 java/1.6.0_18
HEADER: Content-Length: 363
HEADER: Content-Type: text/xml
HEADER: Connection: close

---EVALING---[170 chars]---
new xmlrpcval(array('faultCode' => new xmlrpcval(0, ''),'faultString' => new xmlrpcval("No method matching arguments: java.lang.String, java.lang.String", '')), 'struct');
---END---
Je comprends pas, et cela me bloque .
Merci pour toute aide.

remarque: j'ai essayé de copier ma méthode directement sur la page php mais cela ne change rien; j'ai essayé de créer un singleton de XQueryBP mais sans de meilleurs résultats .