IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Web Service] NuSOAP : Uncaught SoapFault exception Premature end of data tag line 2


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Points : 12
    Points
    12
    Par défaut [Web Service] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    [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 ?

  2. #2
    Membre régulier Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 135
    Points : 89
    Points
    89
    Par défaut
    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....

  3. #3
    Membre régulier Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 135
    Points : 89
    Points
    89
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  4. #4
    Membre régulier Avatar de bankette
    Homme Profil pro
    Chef de Projet Web
    Inscrit en
    Mars 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 135
    Points : 89
    Points
    89
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

Discussions similaires

  1. [Web Service][NuSOAP] Poblème d'envoi de paramètres "ComplexType" vers un WS
    Par pudge dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 27/03/2012, 11h11
  2. Réponses: 6
    Dernier message: 21/04/2011, 15h56
  3. [Web Service] Fatal error: Uncaught SoapFault exception: [Client]..
    Par rosita dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/04/2010, 11h16
  4. [Web Service][NuSOAP] Tableau à 2 dimensions
    Par johandev dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 02/02/2009, 19h00
  5. [Web Service][NuSOAP] Erreur de parsing du XML
    Par binouzzz19 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/02/2008, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo