在nusoap中传递一个xml

时间:2010-07-21 02:13:44

标签: php xml version nusoap

美好的一天,

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

5 个答案:

答案 0 :(得分:1)

升级libxml2并重建PHP。

答案 1 :(得分:0)

我根本不知道nusoap,但听起来你的实体被丢弃了。 可能值得控制两端的实体,例如通过更改“&gt;” for&amp; gt;,'&lt;' for&amp; lt;手动或使用htmlentities()等功能

答案 2 :(得分: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));

答案 3 :(得分:0)

是的,答案在 soapval 课程中。

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

答案 4 :(得分:0)

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