0

PHP SOAP サーバー (nuSoap を使用) と Java クライアント (Axis2 を使用) があります。それがうまくいかなくなるまで、これはかなりうまくいきます。

私がやろうとしていることの要点は、サービスにコードを送信し、ファイル名の XML リストを返すことです。

<filename>20120413.zip</filename>

SSCはこちら

<?
require_once('nusoap/lib/nusoap.php'); 
$server = new soap_server();
$server->configureWSDL('Download Database Backup', 'urn:downloadDatabase');

$server->register('getBackupFileNames',                                  // method
        array('herdCode' => 'xsd:string'), // input parameters
        array('fileList' => 'xsd:string'),                           // output parameters
        'urn:uploadDatabase',                                               // namespace
        'urn:uploadDatabase#uploadDatabase',                                       // soapaction
        'rpc',                                                       // style
        'encoded',                                                   // use
        'uploadDatabase'                                          // documentation
    );

 function getBackupFileNames($herdCode)
    {
    $location = "/home/rhythms/backups/" . $herdCode;
    $fileList = scandir($location);
    return $fileList;
    }//end function

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

いざという時には、foreach を実行して手動で XML を文字列として作成できることがわかりました。ただし、XMLEncoded を取得します。より良い方法はありますか?デフォルトで WSDL に公開したいと考えています。complexType も試しましたが、Axis2 側での処理に問題がありました。

ありがとうございました!

4

1 に答える 1

0

これは直接的な答えではありません。私が思いついたのは、SOAP-ARRAY複合データ型を使用してSOAP配列を送信できるということです。しかし、それはあまり良い方法ではありません。代わりに、PHPが提供するネイティブSOAP実装を調査します。

Axis2はSOAP-ARRAY複合データ型を適切に処理しないため、実装をPHPのネイティブ型に調整する方が簡単だと思います。

これは脚注として残されているので、うまくいけば、他の誰かが私が良いSOAP実装を見つけようとしていたのと同じようにうまく落ちないでしょう。

于 2013-01-03T21:13:51.807 に答える