1

良い一日、

nusoap で xml を渡すのに問題があります。

サンプル: この xml を渡します

<test>123</test>

ヌソープのレスポンスは

test123/test

大なり記号と小なり記号が削除されます。

これはサーバー用の私のコードです:


require_once('nusoap/nusoap.php');
$server = new nusoap_server; // Create server instance

$server->configureWSDL('demows','http://example.org/demo');

$server->register('myFunction',
    array("param"=>"xsd:string"), // input
    array("result"=>"xsd:string"), // output
    'http://example.org/demo'
);

function myFunction($parameters) {
    return $parameters;
}

// Use the request to try to invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA: '';
$server->service($HTTP_RAW_POST_DATA);

これはクライアント用の私のコードです:


require_once('nusoap/nusoap.php');

$client = new nusoap_client('http://localhost/nusoap/ws.php?wsdl', true);

$clientparam = '<test>123</test>';

$result = $client->call('myFunction', 
    array('param'=>$clientparam)
);

print_r($result);

*上記のコードは PHP バージョン 5.3.0 で動作しますが、弊社の製品で使用している PHP バージョン 5.2.0-8+etch13 では動作しないことに注意してください。

2 バージョンの問題をネットで検索しましたが、何も見つかりませんでした。どんな助けでも大歓迎です。ティア

4

5 に答える 5

1

libxml2をアップグレードし、PHPを再構築します。

于 2010-12-05T22:00:15.497 に答える
0

私とは異なるバージョンのnusoapを使用しているかどうかはわかりませんが、プロキシを使用しています。これは機能しているようです。また、nusoap_clientではなくsoapclientを使用してクライアントをインスタンス化します(これまでに見たことはありません)。

 $client = new soapclient('http://localhost/nusoap/ws.php?wsdl', true);
 $proxy = $client->getProxy();
 $response = $proxy->call("myfunction", array('test' => 123));
于 2010-08-02T16:40:55.277 に答える
0

nusoapはまったくわかりませんが、エンティティが破棄されているようです。たとえば、&gt;の場合は'>'、&lt;の場合は'<'を変更するなどして、どちらかの端でエンティティを制御する価値がある場合があります。手動で、またはhtmlentities()などの関数を使用して

于 2010-07-21T13:53:33.550 に答える
0

はい、答えはsoapvalクラスにあります。

少し面倒ですが、簡単な例はこちらです。簡単に言えば、このクラスで非ジェネリック型、つまり php 配列をラップする必要があります。もちろん、このラップのネストは発生する可能性がありますが、設計に反するものではありません。

于 2011-09-25T18:48:33.937 に答える
0

SOAP メッセージ内で xml 値を渡したい場合で、サーバーとクライアントの両方を制御する (または少なくともクライアントに指示できる) 場合は、xml を base64 でエンコードしないでください。そうすれば、パーサーはそれを通常の文字列と見なし、混乱することはありません。

于 2012-07-21T15:05:52.813 に答える