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 :

[POO] SOAP lecture object complexe


Sujet :

Langage PHP

  1. #1
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut [POO] SOAP lecture object complexe
    Je dois acceder a un webservice, qui est sur un serveur.
    J ai le wsdl et je parviens bien a faire l appel de ma methode et sa s execute bien sur le serveur distant.
    La methode me retourne un Objet.
    Comment dois faire pour etre capable de le relire ?
    Dois je creer un class portant le meme nom avec le meme type d attribut ?

  2. #2
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    tu peux mettre un bout de code (l'appel et le retour de l'objet).

  3. #3
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Voila mon code il fait bien la requete vers le serveur distant
    mais j arrive pas a Lire la reponse.
    Vous remarquer que je ne parviens pas non plus a envoyer un type complexe je suis oblige de passer null en parametre.

    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
    $classmap = array(
    'WSScheduledSessionRequestResponse' => 'WSScheduledSessionRequestResponse',
    'WSScheduledSessionRequestResult' => 'RequestParametersOut',
     
    );
    try {
    	echo "new SoapClient ";
    $client = new SoapClient("WSScheduledSession.wsdl",
            array(
            "location" => $location,
            "style"    => SOAP_RPC,
            "use"      => SOAP_ENCODED,
            "classmap" => $classmap
               ));
     
      	echo "WSScheduledSessionRequest ";
     $response = $client->WSScheduledSessionRequest(null);
     
     	echo "response #$response #";
     	// c est ici que je m y perd
     $display =$response->wSScheduledSessionRequestResult;
     $display =$display->requestId;
     echo  "getRequestID =#$display#";
    }
    catch (Exception $e){
    	echo $e;
    }
    catch (ErrorException $e){
    	echo $e;
    }
      echo "END";

  4. #4
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    L extrait du wsdl contenant l objet reponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     <s:element name="WSScheduledSessionRequestResponse">
            <s:complexType>
              <s:sequence>
                <s:element minOccurs="0" maxOccurs="1" name="WSScheduledSessionRequestResult" type="tns:RequestParametersOut" />
              </s:sequence>
            </s:complexType>
          </s:element>
          <s:complexType name="RequestParametersOut">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="RequestId" type="s:string" />
              <s:element minOccurs="1" maxOccurs="1" name="RequestProcessing" type="s:int" />
            </s:sequence>
          </s:complexType>

  5. #5
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    cela me semble correct, mais bon il doit bieny avoir un pb.

    tu as essayer de faire un print_r ou var_dump de response et display ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    salut
    il me semble que tu un probleme de casse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wSScheduledSessionRequestResult
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WSScheduledSessionRequestResult

  7. #7
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Je donne le resultat de l execution du code :
    pour $response j ai Object id #2
    et ca plante sur $display sans message d erreur.
    le code n atteint pas echo "END".

    Voila
    Merci de votre temps

  8. #8
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Jeff,
    je suis desole mais je ne suis pas d avoir compris
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'WSScheduledSessionRequestResult' => 'RequestParametersOut'
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'WSScheduledSessionRequestResult' => 'WSScheduledSessionRequestResult'
    c est ca ?

  9. #9
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Voici la declaration de mes 2 classes pour la reponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class WSScheduledSessionRequestResult{
         public $requestId;
         public $requestProcessing;
    }
     
    class WSScheduledSessionRequestResponse{
    	public $wSScheduledSessionRequestResult;
    }

  10. #10
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Merci pour l idee du var_dump.

    l object contient bien les bonnes valeurs mais j arrive toujour a acceder
    $display est NULL.
    var_dump sur $response
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    object(WSScheduledSessionRequestResponse)#2 (1) { 
     
    ["WSScheduledSessionRequestResult"]=> object(stdClass)#3 (2) { 
     
    ["RequestId"]=> string(3) "147" ["RequestProcessing"]=> int(147) } }

  11. #11
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    ok j ai trouve,
    il fallait que je fasse un accesseur a mon objet WSScheduledSessionRequestResult du coup tout fonctionne.
    La grande question est Pourquoi ??
    Je mettrai en resolu ce soir ou des que quelqu un m explique pourquoi

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    class WSScheduledSessionRequestResult{
    	 public $RequestId;
         public $RequestProcessing;
    }
     
    class WSScheduledSessionRequestResponse{
    	public $WSScheduledSessionRequestResult;
    	// accesseur magique
    	public function  getWSScheduledSessionRequestResult(){
    		return $this->WSScheduledSessionRequestResult;
    	}
    }
     
      ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
      //$server = new SoapServer("D:/download/WSScheduledSession.wsdl");
    echo "START";
    $location =   "http://192.168.100.12:8181/soap";
    $location =   "http://192.168.100.12:8181/services/WSScheduleSessionService";
    $file =   "D:/www/web2meeting/services/WSScheduledSession.wsdl";
    $file =   "WSScheduledSession.wsdl";
    $classmap = array(
    'WSScheduledSessionRequestResponse' => 'WSScheduledSessionRequestResponse',
    'WSScheduledSessionRequestResult' => 'WSScheduledSessionRequestResult'
    );
    try {
    	echo "new SoapClient ";
    $client = new SoapClient("WSScheduledSession.wsdl",
            array(
            "location" => $location,
            "style"    => SOAP_RPC,
            "use"      => SOAP_ENCODED,
            "classmap" => $classmap
               ));
     
      //$client->setClass("WSScheduledSession");
      //$client->handle();
      	echo "WSScheduledSessionRequest ";
     $response = $client->WSScheduledSessionRequest(null);
     var_dump($response);
     	//echo "response *$response*";
     	print_r($response);
     	 if($response instanceof WSScheduledSessionRequestResponse){
     $result =$response->getWSScheduledSessionRequestResult();
     var_dump($result);
     
     $display =$result->RequestId;
     
     
     echo  "getRequestID =*$display*";
      $type =  typeof($response) ;
     echo  " type  =* $type*";
     	 }
     	 else{
     	 	 echo  " ERROR";
     
     	 }
     /*
     foreach($response -> getFunctions() as $func) {        
            echo '<function>' , $func , '</function>';
        }*/
    }
    catch (Exception $e){
    	echo $e;
    }
    catch (ErrorException $e){
    	echo $e;
    }
      echo "END";
     
    ?>

  12. #12
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    Oui, je suis un peu bete
    le var_dump le disait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ["WSScheduledSessionRequestResult"]=> object
    donc renvoi un objet (c'est un type complex donc il faut un objet pour le gerer), il faut donc passer par une methode car le attributs doivent etre prive.

    Mais ensuite RequestId et RequestProcessing sont des type simple et accessible directement en attribut de l'objet.

    Enfin petite analyse rapide un vendredi apres midi...

  13. #13
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Merci beaucoup pour la reponse.
    Je me disais que le seul explication est que l attribut soit prive.
    Mais comme je l ai declare public ce que ca doit venir du Deserializer PHP SOAP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SOAP] soapClient : requete complexe
    Par EurekaInstant dans le forum Langage
    Réponses: 1
    Dernier message: 28/08/2012, 08h58
  2. Réponses: 3
    Dernier message: 29/05/2012, 11h55
  3. WebService et retour d'un Object "complexe"
    Par hadler dans le forum Services Web
    Réponses: 1
    Dernier message: 03/04/2010, 12h28
  4. [Web Service] PHP, soap et type complex
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/07/2009, 16h58
  5. [POO] Sérialiser des objets complexes
    Par Smaon dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/01/2009, 17h44

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