1

再会,

我在 nusoap 中传递 xml 时遇到问题。

示例:我通过了这个 xml

<test>123</test>

nusoap 响应是

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 版本的任何问题,但没有找到。非常感谢任何帮助。TIA

4

5 回答 5

1

升级你的 libxml2 并重建 PHP。

于 2010-12-05T22:00:15.497 回答
0

是的,答案是在soapval课上。

有点凌乱但简单的例子是here。快速 - 你必须用这个类包装任何非泛型类型,即 php 数组。这个包裹的嵌套当然可以发生,但这并不违反设计。

于 2011-09-25T18:48:33.937 回答
0

如果您想在肥皂消息中传递 xml 值并且您同时控制服务器和客户端(或者至少您可以指示客户端),为什么不 base64 编码您的 xml。然后解析器只会将其视为普通字符串而不会混淆。

于 2012-07-21T15:05:52.813 回答
0

我根本不知道 nusoap,但听起来你的实体正在被丢弃。控制两端的实体可能是值得的,例如通过将“>”更改为 >,将“<”更改为 < 手动或使用诸如 htmlentities() 之类的函数

于 2010-07-21T13:53:33.550 回答
0

不确定您使用的 nusoap 版本是否与我不同,但我一直在使用代理,它似乎可以正常工作。我还用soapclient而不是nusoap_client实例化客户端(以前没见过):

 $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 回答