Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/03/2011, 18h42   #1
Invité de passage
 
Inscription : août 2009
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 20
Points : 2
Points : 2
Par défaut Nusoap : Uncaught SoapFault exception Premature end of data tag line 2

Bonjour,

Tout est dans le titre : j'essaie de réaliser pas-à-pas ce tutoriel http://www.codewalkers.com/c/a/Misce...SOAP-with-PHP/ au demeurant très pédagogique mais j'obtiens toujours la même erreur dans les logs d'Apache lors de l'exécution d'un des scripts

En gros je travaille sur une Ubuntu 10.10 et j'installe le paquet libnusoap-php avec synaptic.

Ensuite j'execute le script qu'on peut voir sur cette page en y mettant les bons include. Ce qui donne le script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
?php
function getStockQuote($symbol) {
 
    mysql_connect('localhost','root','abc123');
    mysql_select_db('soaptest1');
    $query = "SELECT stock_price FROM stockprices "
           . "WHERE stock_symbol = '$symbol'";
    $result = mysql_query($query);
 
    $row = mysql_fetch_assoc($result);
    return $row['stock_price'];
}
 
ini_set("soap.wsdl_cache_enabled", "0");
 
require('nusoap/nusoap.php');
 
$server = new soap_server();
 
$server->configureWSDL('stockserver', 'urn:stockquote');
 
$server->register("getStockQuote", array('symbol' => 'xsd:string'), array('return' => 'xsd:decimal'), 'urn:stockqote', 'urn:stockquote#getStockQuote', 'rpc', 'encoded', 'Get stock quote');
 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)
                      ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
script qui à l'air de fonctionner puisque je vois la petite boite lila de nusoap


Par contre quand je clique sur le lien WSDL rien n'apparait mais je peux quand même observer le WSDL dans l'onglet réseau de firebug et il semble que la balise de la ligne 2 ne soit pas correctement écrite puisque le caractère '>' est placé après un passage à la ligne (voyez la balise xsd:schema targetNamespace="urn:stockquote")
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:stockquote" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:stockquote">
<types>
<xsd:schema targetNamespace="urn:stockquote"
>
 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
 <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
</xsd:schema>
</types>
<message name="getStockQuoteRequest">
  <part name="symbol" type="xsd:string" /></message>
<message name="getStockQuoteResponse">
  <part name="return" type="xsd:decimal" /></message>
<portType name="stockserverPortType">
  <operation name="getStockQuote">
    <documentation>Get stock quote</documentation>
    <input message="tns:getStockQuoteRequest"/>
    <output message="tns:getStockQuoteResponse"/>
  </operation>
</portType>
<binding name="stockserverBinding" type="tns:stockserverPortType">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="getStockQuote">
    <soap:operation soapAction="urn:stockquote#getStockQuote" style="rpc"/>
    <input><soap:body use="encoded" namespace="urn:stockqote" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/></input>
    <output><soap:body use="encoded" namespace="urn:stockqote" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/></output>
  </operation>
</binding>
<service name="stockserver">
  <port name="stockserverPort" binding="tns:stockserverBinding">
    <soap:address location="http://localhost/private/soaptest1/stockserver.php"/>
  </port>
</service>
</definitions>
Du coup quand j'exécute le script client (http://www.codewalkers.com/c/a/Misce...AP-with-PHP/5/) il y a une erreur 500 avec ce message dans les logs d'Apache :
Citation:
[Sat Mar 12 18:34:58 2011] [error] [client 127.0.0.1] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/private/soaptest1/stockserver.php' : Premature end of data in tag html line 2\n in /media/www-dev/private/soaptest1/stockclient.php on line 4
[Sat Mar 12 18:34:58 2011] [error] [client 127.0.0.1] PHP Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/private/soaptest1/stockserver.php' : Premature end of data in tag html line 2\n in /media/www-dev/private/soaptest1/stockclient.php:4\nStack trace:\n#0 /media/www-dev/private/soaptest1/stockclient.php(4): SoapClient->SoapClient('http://localhos...')\n#1 {main}\n thrown in /media/www-dev/private/soaptest1/stockclient.php on line 4
Donc je suis preneur d'éventuels retours d'expérience sur ce genre d'erreur de nusoap. Des idées ?
mika34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 17h29   #2
Membre du Club
 
Avatar de bankette
 
Homme Julien
Chef de Projet Web
Inscription : mars 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Chef de Projet Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2007
Messages : 134
Points : 55
Points : 55
Je remonte le topic, j'ai exactement le même problème, avez vous trouvez une solution?
Quelqu'un en aurait-il une?

Merci,
__________________
-- Bankette --
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème....
bankette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 09h24   #3
Membre du Club
 
Avatar de bankette
 
Homme Julien
Chef de Projet Web
Inscription : mars 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Chef de Projet Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2007
Messages : 134
Points : 55
Points : 55
Hello,

Je réponds à ma question, j'ai résolu le problème.
Le problème ne venait pas de mon serveur mais du mon client.

En effet tous les tutos sur nuSoap présente la solution pour php4 et non php5, si j'ai bien compris nuSoap n'est plus maintenu depuis php5...

Coté serveur, le code marche bien sur php 5.2.9

Donc dans le code du client les tutoriaux mettent les lignes de code suivante :
Code :
1
2
$client = new soapclient('http://xxxxx/webServiceNuSoap.php?wsdl', true);
$client->call('hello', array('name' => 'Bankette'))
Mais en php5 la fonction "call" n'est plus utilisé, il faut utiliser la fonction "_soapCall". Et la fonction soapclient, ne prend plus les même arguments.

Code :
1
2
$client = new soapclient('http://xxxxx/webServiceNuSoap.php?wsdl');
$client-> __soapCall('hello', array('name' => 'Bankette'))
Ce qui est perturbant, c'est que la fonction call peut etre utilisée mais provoque des erreurs.

Cela a résolu les problèmes pour moi en tout cas !
__________________
-- Bankette --
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème....
bankette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h31   #4
Membre du Club
 
Avatar de bankette
 
Homme Julien
Chef de Projet Web
Inscription : mars 2007
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Chef de Projet Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2007
Messages : 134
Points : 55
Points : 55
Je continue mon monologue

J'ai également reproduit la seconde erreur.
Mon fichier wsdl commencé après un " ", du coup il n'était plus reconnu et j'avais l'erreur expliqué dans le premier message.

Pour pouvoir utiliser mon webService, forcément je fais appel à des classes qui me sont propres.
Si l'instanciation des mes objets de classe était fait avant la création du serveur : l'erreur était :
Code :
Fatal error:  Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from
Si l'instanciation des mes objets de classe était fait après la création du serveur (donc dans mes fonctions) : l'erreur était :
Code :
Fatal error:  Uncaught SoapFault exception: [Client] looks like we got no XML document
Cela venait du fait que j'avais un espace qui trainait après mes fermetures de balise php (?>) dans une de mes classes appelée par mon webservice.
__________________
-- Bankette --
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème....
bankette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h41.


 
 
 
 
Partenaires

Hébergement Web