我正在使用nosoap在PHP中开发Web服务。这是我的文件,webservice.php
<?php
require_once "nusoap/nusoap.php";
$namespace = "urn:mywsdl";
$server = new soap_server();
$server->configureWSDL('myWS', $namespace);
$server->wsdl->schemaTargetNamespace = $namespace;
$server->wsdl->addComplexType('datosBasicos', 'complexType', 'struct', 'all', '', array(
'codigo' => array(
'name' => 'codigo',
'type' => 'xsd:string'
),
'nombre' => array(
'name' => 'nombre',
'type' => 'xsd:string'
)
));
$server->wsdl->addComplexType('arraydatosBasicos', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array(
array('ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:datosBasicos[]')
), 'tns:datosBasicos'
);
$server->register('saludar', array('nombre' => 'xsd:string'), array('return' => 'tns:arraydatosBasicos'), $namespace);
function saludar($nombre) {
$array[] = array('codigo' => '123', 'nombre' => 'test');
$array[] = array('codigo' => '5745', 'nombre' => 'probando');
$datos[] = $array[1];
return $datos;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
但是,当我使用SOAPUI部署Web服务时,我收到此错误:
<b>Notice</b>: Array to string conversion in <b>C:\xampp\htdocs\nusoap\nusoap\nusoap.php</b> on line <b>6132</b><br />
我做错了什么?
答案 0 :(得分:7)
我遇到了类似的错误,我不得不在nusoap.php中评论一行:像:
//$this->debug("$k = $v<br>");
对我来说很好。
显然,它仅用于调试,所以不要担心功能,因为如果你对该行进行注释它应该是相同的。我认为当你创建复杂的数据时(这意味着,在你的情况下,在另一个数组中的数组) nusoap无法打印它进行调试。
无论如何祝你好运。
答案 1 :(得分:3)
我有同样的问题。您可以将数据转换为字符串以保持调试以供进一步使用,并删除警告
搜索此代码
foreach(curl_getinfo($this->ch) as $k => $v){
$err .= "$k: $v<br>";
}
$this->debug($err);
并替换为这个
foreach(curl_getinfo($this->ch) as $k => $v){
if(is_array($v)){
$v = implode(" / ", $v);
}
$err .= "$k: $v<br>";
}
$this->debug($err);
答案 2 :(得分:1)
对于最新的nuSoap版本,以下内容将解决您的问题:
在nusoap.php中找到以下代码
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
在第6132行或其他任何地方。
并评论它
// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
因为它仅用于调试目的。所以不要担心任何功能问题。
答案 3 :(得分:0)
我在nusoap-0.9.5(对于php5.3)中也遇到了同样的问题,由于一些服务器标头作为空白数组传递,因此发生了错误。 因此,我添加了以下代码,发现它现在可以正常工作。
if(is_array($v))
{
$v = implode(",", $v );
}