2010-01-18 7 views
4

Confluence soap api définit deux méthodes avec le même nom, mais différents paramètres:Comment appeler la méthode SOAP surchargée avec PHP SoapClient?

  • page getPage (de jeton chaîne longue pageId) - retourne une page unique (selon la documentation du second paramètre est une chaîne, mais dans WSDL, il est long)
  • page getPage (jeton String, String spaceKey, String pageTitle) - renvoie une seule page

je aurais besoin d'appeler la méthode avec deux paramètres à l'aide de PHP SoapClient. En mode WSDL, SoapClient insiste sur l'utilisation de trois paramètres. En mode non-WSDL j'ai réussi à faire un appel avec deux paramètres, mais je ne peux pas faire que le type du second paramètre soit long. Comment puis-je demander à SoapClient d'appeler getPage avec deux paramètres avec les types corrects?

Voici ce que je l'ai fait jusqu'à présent:

En utilisant SoapClient en mode WSDL ...

$soapClient = new SoapClient("http://xxx/confluence/rpc/soap-axis/confluenceservice-v1?wsdl", array("trace" => TRUE)); 
$token = $soapClient->login(CONFLUENCE_USERNAME, CONFLUENCE_PASSWORD); 
$page = $soapClient->getPage($token, $confluence_article_id); 

... produit une demande de la méthode à trois paramètres (seul organisme montré). ..

<SOAP-ENV:Body><ns1:getPage><in0 xsi:type="xsd:string">dkjLIx00Ap</in0><in1 xsi:type="xsd:string">24445207</in1><in2 xsi:nil="true"/></ns1:getPage></SOAP-ENV:Body> 

... ce qui provoque la faute:

<faultstring>com.atlassian.confluence.rpc.RemoteException: You're not allowed to view that page, or it does not exist.</faultstring> 

La page avec cet ID existe et je suis autorisé à le voir, ce que je peux confirmer en faisant le bon type de demande avec SoapUI.

Utilisation SoapClient est le mode non-WSDL ...

$soapClient = new SoapClient(null, array(
    "location" => "http://xxx/confluence/rpc/soap-axis/confluenceservice-v1", 
    "uri" => "http://soap.rpc.confluence.atlassian.com", 
    "trace" => TRUE)); 
$token = $soapClient->login(CONFLUENCE_USERNAME, CONFLUENCE_PASSWORD); 
$page = $soapClient->getPage($token, $confluence_article_id); 

... produit une demande pour le procédé à deux paramètres de type incorrect pour le deuxième paramètre. Lorsque confluence_article_id de $ est une chaîne, la demande est ...

<SOAP-ENV:Body><ns1:getPage><param0 xsi:type="xsd:string">8Or94ZLqe7</param0><param1 xsi:type="xsd:string">24445207</param1></ns1:getPage></SOAP-ENV:Body> 

... qui renvoie le même défaut que ci-dessus:

<faultstring>com.atlassian.confluence.rpc.RemoteException: You're not allowed to view that page, or it does not exist.</faultstring> 

Lorsque $ confluence_article_id est un entier, la demande est ...

<SOAP-ENV:Body><ns1:getPage><param0 xsi:type="xsd:string">y0kF4z0m9L</param0><param1 xsi:type="xsd:int">24445207</param1></ns1:getPage></SOAP-ENV:Body> 

... qui retourne un autre type de faute:

<faultstring>org.xml.sax.SAXException: Bad types (int -> class java.lang.String)</faultstring> 

Si je prends la requête, changez int pour long et essayez avec SoapUI, ça marche très bien.

J'ai aussi essayé de l'appeler à l'aide __soapCall, mais les résultats sont similaires:

$page = $soapClient -> __soapCall('getPage', array('in0'=>$token,'in1'=>$confluence_article_id)); 

Il y a un PHP lié bug report et another one et discussion on Atlassian forums, mais aucun d'entre eux m'a aidé. Jusqu'à présent, la meilleure suggestion a été de modifier le WSDL en supprimant l'autre définition getPage et en l'enregistrant localement quelque part.

Répondre

0

Si je me souviens bien, vous pouvez appeler la fonction à l'aide d'un tableau associatif à la place ex:

//Page getPage(String token, String spaceKey, String pageTitle) 
$soapClient->getPage(array("token" => $token,"spaceKey" => $spaceKey,"pageTitle" => $pageTitle)); 

Non testé, avertissements standard s'appliquent

+0

Merci pour la réponse, mais je pense que j'ai essayé cela sans succès (Je ne suis plus impliqué dans ce projet, donc je ne peux pas vérifier). J'ai fini par utiliser une version modifiée de WSDL où j'avais enlevé l'autre définition de getPage. Accepter votre réponse de toute façon :) – jarnoan

Questions connexes