Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Notice Array to string conversion using nusoap

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?

like image 872
chenio Avatar asked Dec 19 '22 16:12

chenio


2 Answers

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.

like image 77
ackuser Avatar answered Dec 24 '22 01:12

ackuser


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);
like image 42
Julio Garcés Teuber Avatar answered Dec 24 '22 02:12

Julio Garcés Teuber