J'essaye d'obtenir un type complexe d'un serveur php avec une opération pour obtenir un tableau d'animaux (type complexe défini dans le wsdl), ce tableau est défini comme ConjuntAnimals comme un tableau d'objets animaux.L'appel PHP nusoap retourne bool false au lieu du tableau complexType
Mais quand je fais le $result = $client->call('consulta_gossos', $params);
je reçois un bool (faux). J'ai débogué et connecté depuis longtemps, et j'ai vu que dans l'opération de savon, juste avant de revenir, sa valeur est un tableau d'animaux (ce qu'il devrait retourner), mais dans le client je ne reçois pas ceci est retourné.
Après avoir réalisé, je pense que peut-être ce sont les définitions complexType que j'ai tort, mais je l'ai comparé avec beaucoup d'exemples et ne devrait pas être ça ...
En outre, (peut-être aide) Je reçois cette erreur connecté:
[10-Dec-2016 12:59:11 America/New_York] PHP Catchable fatal error: Object of class stdClass could not be converted to string in /home/cabox/workspace/lib/nusoap.php on line 6132 [10-Dec-2016 12:59:11 America/New_York] Response not of type text/xml: text/html
Je comprends qu'il attend une réponse xml, donc je l'ai essayé de revenir json_encode($gossos)
au lieu de simplement $gossos
, mais il enregistre ceci: [10-Dec-2016 13:11:34 America/New_York] XML error parsing SOAP payload on line 2: Invalid document end
Ici ajouter le client et le code serveur:
client:
<?php
require_once('./lib/nusoap.php');
$wsdl='http://php-ad-msk1416368101.codeanyapp.com/soapserver.php?wsdl';
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
$client = new nusoap_client($wsdl,'wsdl');
$client->encode_utf8 = false;
$client->decode_utf8 = false;
$client->soap_defencoding = 'utf-8';
$err = $client->getError();
if ($err) {
echo "Constructor error" . $err;
exit();
}
$edat = $_GET['edat'];
$raca = $_GET['raca'];
$vacunat = $_GET['vacunes'];
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
$result = $client->call('consulta_gossos', array('edat' => $edat, 'raca' => $raca, 'vacunat' => $vacunat));
$err = $client->getError();
error_log($err);
error_log(json_encode($result));
echo 'Type: '.gettype($result).', size: '.sizeOf($result);
?>
`
<?php
require_once('./lib/nusoap.php');
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log("Hello, errors!");
$server = new nusoap_server;
$server->soap_defencoding = 'utf-8';
$server->encode_utf8 = false;
$server->decode_utf8 = false;
$server->configureWSDL('server','urn:server');
$server->wsdl->schemaTargetNamespace = 'urn:server';
$server->wsdl->addComplexType('Animal',
'complexType',
'struct',
'all',
'',
array(
'xip' => array('name' => 'xip', 'type' => 'xsd:int'),
'nom' => array('name' => 'nom', 'type' => 'xsd:string'),
'edat' => array('name' => 'edat', 'type' => 'xsd:int'),
'vacunat' => array('name' => 'vacunat', 'type' => 'xsd:string'),
'menjar' => array('name' => 'menjar', 'type' => 'xsd:string'),
'data_entrada' => array('name' => 'data_entrada', 'type' => 'xsd:string'),
)
);
$server->wsdl->addComplexType('ConjuntAnimals',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType',
'wsdl:arrayType'=>'tns:Animal[]')
),
'tns:Animal'
);
$server->register('consulta_gossos',
array('edat' => 'xsd:string',
'raca' => 'xsd:string',
'vacunat' => 'xsd:string'),
array('return' => 'tns:ConjuntAnimals'), //output
'urn:server', //namespace
'urn:server#consulta_gossos', //SOAP action
'rpc',
'encoded',
'Consultar els gossos que compleixen el filtre');//description
function consulta_gossos($edat, $raca, $vacunat) {
$servername = 'localhost';
$username = 'root';
$password = 'root';
$dbname = 'bd_refugi';
$vacunes = ($vacunat =='si') ? 1 : 0;
$sql_edat = ($edat == 'gran') ? ' edat > 5 ' : ' edat <= 5 ';
$connection = new mysqli($servername, $username, $password, $dbname);
$sql = 'select * from gossos where '.$sql_edat.' and raca="'.$raca.'" and vacunat='.$vacunes;
$res = $connection->query($sql);
$gossos = array();
while ($row=$res->fetch_assoc()) {
$gos->xip=$row['xip'];
$gos->nom=$row['nom'];
$gos->edat=$row['edat'];
$gos->vacunat=$row['vacunat'];
$gos->menjar=$row['menjar'];
$gos->data_entrada=$row['data_entrada'];
array_push($gossos,$gos);
}
error_log(json_encode($gossos));
error_log('-----------------------------------------');
return json_encode($gossos);
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
`
Désolé pour le indenter, mes yeux saignent trop après la copie -past le code ici. Edit: en laissant de côté les erreurs montrées ci-dessus, la question vise à se concentrer davantage sur pourquoi retourner un tableau "correct", dans le client, je reçois un tableau vide une fois que j'ai éliminé toutes ces erreurs.
Je ne peux pas vous aider avec votre erreur, car je n'ai jamais utilisé de savon ... mais sur le stdClass ... peut-être ce lien peut vous aider à expliquer ce qui cause ce problème? http://stackoverflow.com/questions/3607550/object-of-class-stdclass-could-not-be-converted-to-string –