4

Confluence soap apiは、同じ名前でパラメーターが異なる2つのメソッドを定義します。

  • Page getPage(String token、long pageId)-単一のページを返します(ドキュメントによると、2番目のパラメーターはStringですが、WSDLでは長いです)
  • ページgetPage(文字列トークン、文字列spaceKey、文字列pageTitle)-単一のページを返します

PHP SoapClientを使用して、2つのパラメーターでメソッドを呼び出す必要があります。WSDLモードでは、SoapClientは3つのパラメーターを使用することを要求します。非WSDLモードでは、2つのパラメーターを使用して呼び出しを行うことができましたが、2番目のパラメーターのタイプを長くすることはできません。正しいタイプの2つのパラメーターを使用してSoapClientにgetPageを呼び出させるにはどうすればよいですか?

これが私がこれまでにしたことです:

WSDLモードでのSoapClientの使用...

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

... 3パラメータメソッドのリクエストを生成します(本文のみが表示されています)...

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

...これは障害を引き起こします:

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

そのIDのページは存在し、私はそれを見ることができます。これは、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);

...2番目のパラメータのタイプが正しくない2パラメータメソッドのリクエストを生成します。$ confluence_article_idが文字列の場合、リクエストは...

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

...上記と同じ障害を返します:

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

$ confluence_article_idが整数の場合、リクエストは...

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

...これは別の種類の障害を返します:

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

リクエストを受け取り、intをlongに変更して、SoapUIで試してみると、問題なく動作します。

__soapCallを使用して呼び出しようとしましたが、結果は次のようになります。

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

関連するPHPバグレポート別のレポート、およびAtlassianフォーラムでのディスカッションがありますが、どれも役に立ちませんでした。

これまでのところ、最良の提案は、他のgetPage定義を削除し、それをローカルのどこかに保存することによって、WSDLを微調整することでした。

4

1 に答える 1

0

私の記憶が正しければ、代わりに連想配列を使用して関数を呼び出すことができます。例:

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

テストされていません。標準の警告が適用されます

于 2010-02-03T00:25:13.227 に答える