Como chamar o método SOAP sobrecarregado com PHP SoapClient?

API de sabão de confluência define dois métodos com o mesmo nome, mas com parâmetros diferentes:

Página getPage (token da string, pageId longo) - retorna uma única página (de acordo com a documentação, o segundo parâmetro é String, mas no WSDL é longo)Página getPage (token de string, string spaceKey, string pageTitle) - retorna uma única página

Eu precisaria chamar o método com dois parâmetros usando o PHP SoapClient. No modo WSDL, o SoapClient insiste em usar o de três parâmetros. No modo não WSDL, consegui fazer uma chamada com dois parâmetros, mas não posso fazer com que o tipo do segundo parâmetro seja longo. Como faço para que o SoapClient chame getPage com dois parâmetros com os tipos corretos?

Aqui está o que eu fiz até agora:

Usando SoapClient no modo 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);

... produz uma solicitação para o método de três parâmetros (apenas o corpo é mostrado) ...

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

... o que causa falha:

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

A página com esse ID existe e posso vê-lo, o que posso confirmar fazendo o tipo correto de solicitação com o SoapUI.

Usar o SoapClient é um modo não 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);

... produz uma solicitação para o método de dois parâmetros com tipo incorreto para o segundo parâmetro. Quando $ confluence_article_id é string, a solicitação é ...

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

... que retorna a mesma falha que acima:

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

Quando $ confluence_article_id é um número inteiro, a solicitação é ...

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

... que retorna um tipo diferente de falha:

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

Se eu atender à solicitação, alterar int por muito tempo e testá-lo com o SoapUI, ele funcionará perfeitamente.

Eu também tentei chamá-lo usando __soapCall, mas os resultados são semelhantes:

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

Existe um PHP relacionadorelatório de erro eoutroediscussão nos fóruns do Atlassian, mas nenhum deles me ajudou.

Até agora, a melhor sugestão foi ajustar o WSDL removendo a outra definição de getPage e salvando-a localmente em algum lugar.

questionAnswers(1)

yourAnswerToTheQuestion