Notice Array to string conversion using nusoap

2019-06-25 12:34发布

I'm developing a web service in PHP, using nosoap. this is my file, 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);
?>

But, when I deploy the web service, with SOAPUI, I get this error:

<b>Notice</b>:  Array to string conversion in <b>C:\xampp\htdocs\nusoap\nusoap\nusoap.php</b> on line <b>6132</b><br />

What am I doing wrong?

3条回答
闹够了就滚
2楼-- · 2019-06-25 12:44

I have the same problem. You can convert the data to string to keep the debug for further usage and remove the warning

Search for this code

foreach(curl_getinfo($this->ch) as $k => $v){
    $err .= "$k: $v<br>";
}
$this->debug($err);

And replace with this one

foreach(curl_getinfo($this->ch) as $k => $v){
    if(is_array($v)){
        $v = implode(" / ", $v);
    }
    $err .= "$k: $v<br>";
}
$this->debug($err);
查看更多
smile是对你的礼貌
3楼-- · 2019-06-25 13:05

I got a similar error, I had to comment a line in nusoap.php..something like:

//$this->debug("$k = $v<br>");

and it was fine for me.

Obviously, it is only for debug so don't worry about the functionality, because it should be the same if you comment the line. I think when you create complex data (that's mean, in your case an array inside another array) nusoap is not able to print it for debugging.

Anyway good luck.

查看更多
淡お忘
4楼-- · 2019-06-25 13:06

For latest nuSoap version, the below will solve your problem :

FIND the below code in nusoap.php

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

in line 6132 or something around this no.

AND COMMENT IT

// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

Since it just for debug purpose. so not to worry about any functionality issues.

查看更多
登录 后发表回答