Как вызвать перегруженный метод SOAP с помощью PHP SoapClient?
Мыло api определяет два метода с одинаковым именем, но разными параметрами:
Page getPage (String token, long pageId) - возвращает одну страницу (согласно документации вторым параметром является String, но в WSDL он длинный)Page getPage (String token, String spaceKey, String pageTitle) - возвращает одну страницуМне нужно было бы вызвать метод с двумя параметрами, используя PHP SoapClient. В режиме WSDL SoapClient настаивает на использовании трехпараметрического. В режиме без WSDL мне удалось сделать вызов с двумя параметрами, но я не могу сделать тип второго параметра длинным. Как я могу заставить SoapClient вызывать getPage с двумя параметрами с правильными типами?
Вот'что ядо сих пор сделали:
Использование SoapClient в режиме 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);
... создает запрос для трехпараметрического метода (показано только тело) ...
dkjLIx00Ap24445207
... который вызывает ошибку:
com.atlassian.confluence.rpc.RemoteException: You're not allowed to view that page, or it does not exist.
Страница с таким идентификатором существует, и мне разрешено ее просматривать, что я могу подтвердить, сделав правильный тип запроса с помощью SoapUI.
Использование SoapClient не в режиме 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);
... создает запрос для двухпараметрического метода с неверным типом для второго параметра. Когда $ confluence_article_id является строкой, запрос ...
8Or94ZLqe724445207
... который возвращает ту же ошибку, что и выше:
com.atlassian.confluence.rpc.RemoteException: You're not allowed to view that page, or it does not exist.
Когда $ confluence_article_id является целым числом, запрос ...
y0kF4z0m9L24445207
... который возвращает другой тип ошибки:
org.xml.sax.SAXException: Bad types (int -> class java.lang.String)
Если я беру запрос, меняю int на long и пробую его с SoapUI, он работает просто отлично.
Я также пытался вызвать его с помощью __soapCall, но результаты похожи:
$page = $soapClient -> __soapCall('getPage', array('in0'=>$token,'in1'=>$confluence_article_id));
Есть связанный PHPсообщение об ошибке а такжедругой, а такжеобсуждение на атласских форумах, но никто из них не помог мне.
До сих пор лучшим предложением было настроить WSDL, удалив другое определение getPage и сохранив его где-нибудь локально.