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

Langage PHP Discussion :

migration d'un appel de service web PHP 4 vers appel en PHP 5


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut migration d'un appel de service web PHP 4 vers appel en PHP 5
    Bonjour,

    j'ai besoin de migrer mon appel web service php4 sous la version php5, cependant je me heurte à une difficulté, le passage des paramètres.

    Afin de vous préciser le contexte, ci-dessous l'appel php4 puis php5. Ce dernier ne fonctionne pas.

    appel php4 (fonctionne bien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    include_once("nusoap.php");
    $soapclient = new soapclient("http://monurl:7001/dossier",false,false,false,false,false,30,30);
     
    $param = array("PARAM1" => "VALEUR1", 
                         "PARAM2"=>"VALEUR2", 
                         "PARAM3"=>"VALEUR3");
    $retour = $soapclient->call("METHODE_DISTANTE", $param);
    print_r($retour);

    appel php5 (ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $soapclient = new SoapClient(NULL, array("location" => "http://monurl:7001/dossier", "uri" => "urn:xmethods-delayed-quotes", 'trace'    => 1,));
     
    $tab = array ("PARAM1"=> "VALEUR1",
                       "PARAM2"=>"VALEUR2",
                       "PARAM3"=>"VALEUR3");
     
    $retour = call_user_func_array(array($soapclient, 'METHODE_DISTANTE'), array($tab));
     
    print_r($retour);
    L'appel en php5 me lève une exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Fatal error: Uncaught SoapFault exception: [soapenv:Server.userException] org.xml.sax.SAXException: Bad types (class java.util.HashMap -> class java.lang.Integer) in chemin/nomDeMonFichier.php:26
    Stack trace:
    #0 [internal function]: SoapClient->__call('METHODE_DISTANTE', Array)
    #1 [internal function]: SoapClient->METHODE_DISTANTE(Array)
    #2 chemin/nomDeMonFichier.php(26): call_user_func_array(Array, Array)
    #3 {main}
      thrown in chemin/nomDeMonFichier.php on line 26
    Un print_r du client soap (ci-dessous) semble cohérent (je pense que le problème se situe au niveau du passage des paramètres).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SoapClient Object
    (
        [uri] => urn:xmethods-delayed-quotes
        [location] => http://monurl:7001/dossier
        [trace] => 1
        [_soap_version] => 1
    )

    Remarque :
    - je précise que le web service côté serveur ne propose pas de wsdl, j'ai donc besoin que mon appel en php5 fonctionne en mode non wsdl.
    - je me suis basé au départ sur cet exemple : http://devzone.zend.com/node/view/id/689 mais il ne passe qu'un seul paramètre (j'ai testé également d'autres syntaxes mais sans succès, dans la portion de code que je vous présente, une syntaxe que j'ai repris d'un appel php5 en mode wsdl qui fonctionne).

    Auriez-vous une idée pour que ma migration vers php5 fonctionne ?

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Pourquoi ne pas simplement appeler la méthode __soapCall() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $soapclient = new SoapClient(NULL, array("location" => "http://monurl:7001/dossier", "uri" => "urn:xmethods-delayed-quotes", 'trace'    => 1,));
     
    $tab = array ("PARAM1"=> "VALEUR1",
                       "PARAM2"=>"VALEUR2",
                       "PARAM3"=>"VALEUR3");
     
    $retour = $soapclient->__soapCall( 'METHODE_DISTANTE', array( $tab ) );

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut
    Bonjour Bisûnûrs,

    je viens de tester mais l'erreur persiste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fatal error: Uncaught SoapFault exception: [soapenv:Server.userException] org.xml.sax.SAXException: Bad types (class java.util.HashMap -> class java.lang.Integer) in chemin/nomDeMonFichier.php:30
    Stack trace:
    #0 chemin/nomDeMonFichier.php(30): SoapClient->__soapCall('METHODE_DISTANTE', Array)
    #1 {main}
      thrown in chemin/nomDeMonFichier.php on line 30
    Je commence à me demander si un appel qui fonctionne en php4 doit obligatoirement fonctionner en php5 ?

    Si vous avez d'autres propositions je suis preneur.

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Ton serveur Java a l'air d'attendre un entier en paramètre et tu lui fournis un tableau associatif.

    En passant les paramètres comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = $soapclient->__soapCall( 'METHODE_DISTANTE', $tab );

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Et :
    Citation Envoyé par Bisûnûrs Voir le message
    Ton serveur Java a l'air d'attendre un entier en paramètre et tu lui fournis un tableau associatif.

    En passant les paramètres comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = $soapclient->__soapCall( 'METHODE_DISTANTE', $tab );
    ?

  6. #6
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 35
    Par défaut
    Je viens de tenter mais exception toujours présente.


    Par contre, tu me dis :
    "Ton serveur Java a l'air d'attendre un entier en paramètre et tu lui fournis un tableau associatif"

    Hors dans l'appel suivant, que tu me conseilles, mon parametre : "$tab" reste un tableau associatif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = $soapclient->__soapCall( 'METHODE_DISTANTE', $tab );
    J'ai testé aussi ce type d'appel avec la methode SoapParam() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $retour = $soapclient->METHODE_DISTANTE(
    new SoapParam("VALEUR1", "PARAM1"),
    new SoapParam("VALEUR2", "PARAM2"),
    new SoapParam("VALEUR3", "PARAM3")
    );
    L'exception reste identique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Fatal error: Uncaught SoapFault exception: [soapenv:Server.userException] org.xml.sax.SAXException: Bad types (class java.lang.String -> class java.lang.Integer) in chemin/nomDeMonFichier.php:45
    Stack trace:
    #0 [internal function]: SoapClient->__call('METHODE_DISTANTE', Array)
    #1 chemin/nomDeMonFichier.php(45): SoapClient->METHODE_DISTANTE(Object(SoapParam), Object(SoapParam), Object(SoapParam), Object(SoapParam), Object(SoapParam), Object(SoapParam), Object(SoapParam))
    #2 {main}
      thrown in chemin/nomDeMonFichier.php on line 45

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    La doc concernant SoapClient : http://fr2.php.net/manual/fr/soapclient.soapclient.php
    SoapClient::SoapClient ( mixed $wsdl [, array $options ] )
    Ce qui veut dire que le 1er paramètre du constructeur est obligatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $soapclient = new SoapClient(NULL, array(... etc ...);
    Or, de ton coté, tu mets NULL.

    Faut peut être lui indiquer le service Web en question (en 1er argument), non ?

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Faut peut être lui indiquer le service Web en question (en 1er argument), non ?
    Non non, c'est juste comme ça, il est en mode non-WSDL.

    Et cf la doc dans la liste des paramètres :
    wsdl :
    URI du fichier WSDL ou NULL s'il travaille en mode non-WSDL.

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    @Bisûnûrs
    A ben oui, tout à fait ... désolé

    Bad types (class java.util.HashMap -> class java.lang.Integer)
    Par rapport à l'erreur, apparemment il y a une données qui ne serait pas du bon type.
    Provoqué par quoi, alors là ???

Discussions similaires

  1. créer un Client REST JAX-RS appelant un service web PHP
    Par paladin972 dans le forum Services Web
    Réponses: 0
    Dernier message: 16/04/2012, 17h59
  2. [Eclipse] erreur lors l'appel du service web
    Par khallou2007 dans le forum Services Web
    Réponses: 9
    Dernier message: 03/12/2008, 22h53
  3. Réponses: 1
    Dernier message: 12/02/2007, 15h22
  4. Réponses: 6
    Dernier message: 21/07/2006, 02h19

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