xmlrpc (No method matching arguments) : Mauvaise conception ?!
Salut a tous, 8-)
Je voulais vous présenter un beau modèle de problème conceptuel, je suppose :oops: (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 :calim2: 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 :aie: :aie::aie: .
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 :cry: .