Wie rufe ich eine überladene SOAP-Methode mit PHP SoapClient auf?

Confluence Seife api definiert zwei gleichnamige Methoden mit unterschiedlichen Parametern:

Page getPage (String-Token, long pageId) - gibt eine einzelne Seite zurück (gemäß der Dokumentation ist der zweite Parameter String, in WSDL ist er jedoch long)Seite getPage (String Token, String SpaceKey, String PageTitle) - Gibt eine einzelne Seite zurück

Ich müsste die Methode mit zwei Parametern mit PHP SoapClient aufrufen. Im WSDL-Modus besteht SoapClient darauf, die Drei-Parameter-Eins zu verwenden. Im Nicht-WSDL-Modus ist es mir gelungen, einen Aufruf mit zwei Parametern durchzuführen, aber ich kann den Typ des zweiten Parameters nicht lang machen. Wie kann ich den SoapClient veranlassen, getPage mit zwei Parametern mit den richtigen Typen aufzurufen?

Folgendes habe ich bisher getan:

SoapClient im WSDL-Modus verwenden ...

$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);

... gibt eine Anfrage für die Drei-Parameter-Methode aus (nur der Körper wird angezeigt) ...

<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>

... was den Fehler verursacht:

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

Die Seite mit dieser ID existiert und ich darf sie sehen, was ich bestätigen kann, indem ich die richtige Art von Anfrage bei SoapUI mache.

Die Verwendung von SoapClient ist kein WSDL-Modus ...

$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);

... erzeugt eine Anforderung für die Zwei-Parameter-Methode mit falschem Typ für den zweiten Parameter. Wenn $ confluence_article_id eine Zeichenfolge ist, lautet die Anforderung ...

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

... was den gleichen Fehler wie oben zurückgibt:

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

Wenn $ confluence_article_id eine Ganzzahl ist, lautet die Anforderung ...

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

... was eine andere Art von Fehler zurückgibt:

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

Wenn ich die Anfrage nehme, int zu long ändere und es mit SoapUI probiere, funktioniert es einwandfrei.

Ich habe auch versucht, es mit __soapCall aufzurufen, aber die Ergebnisse sind ähnlich:

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

Es gibt ein verwandtes PHPFehlerbericht undnoch einer, undDiskussion in Atlassian-Foren, aber keiner von ihnen hat mir geholfen.

Bisher war der beste Vorschlag, die WSDL zu optimieren, indem die andere getPage-Definition entfernt und lokal gespeichert wurde.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage