Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2012, 11h02   #1
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 520
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 520
Points : 536
Points : 536
Par défaut xmlrpc (No method matching arguments) : Mauvaise conception ?!

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 :
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 :
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 :
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 :
Citation:
---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 .
__________________
"le rhume distillation - L’estomac est la cucurbite, le cerveau le chapiteau, & le nez le réfrigérant par lequel s’écoule goutte à goutte le produit de la distillation."
de Avicenne

Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Un problème? venez en découdre!
tigunn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h22   #2
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 520
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 520
Points : 536
Points : 536
Bonjour
Finalement, après que je me sois occuper d'un autre développement, bien plus urgent, je suis revenu sur ce problème.
En fait, c'était juste un include oublié .
Code :
require_once('classes/exist_phpapi.inc');
Merci à tous.
__________________
"le rhume distillation - L’estomac est la cucurbite, le cerveau le chapiteau, & le nez le réfrigérant par lequel s’écoule goutte à goutte le produit de la distillation."
de Avicenne

Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Un problème? venez en découdre!
tigunn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h38.


 
 
 
 
Partenaires

Hébergement Web