Bonjour,

J'ai une application SOAP qui marche parfaitement, décrite par un fichier wsdl. Jusque là, les clients étaient écrit en PHP, et j'aimerai écrire un client en perl, plus adapté aux routines des serveurs.

Cependant, j'ai quelques difficultés à parvenir à mes fins. Tout ce passe comme s'il ne lisait pas les valeur que je lui envoie.

Voici mon code du client :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
use SOAP::WSDL;
use Data::Dumper;
 my $soap = SOAP::WSDL->new(
    wsdl => 'http://cerbere.via.ecp.fr/connectd/connectd.wsdl',
 );
my %request=();
 
${$request{'request'}}{'user'}= 'login'=>'corum','password'=>"*****"};
${$request{'request'}}{'plug'}={'building'=>'C','room'=>'324'};
${$request{'request'}}{'protocol'}='telnet';
$result =  $soap->call('connect',%request);
print Dumper(\%request);
print Dumper(\$result->result);
Et j'ai en sorti :

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
 
$VAR1 = {
          'request' => {
                         'protocol' => 'telnet',
                         'plug' => {
                                     'building' => 'C',
                                     'room' => '324'
                                   },
                         'user' => {
                                     'password' => '*****',
                                     'login' => 'corum'
                                   },
 
                       }
        };
$VAR1 = \{
            'log' => {
                     'severity' => 'Error',
                     'message' => 'Request denied: insufficient authorization level',
                     'code' => '721'
                   },
            'code' => '721'
};
Tout se passe comme si j'avais rentré un mauvais login/password.

Pour information, voici la parti de wsdl décrivant la requete de cette méthode :

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
 
<xsd:element name="statusRequest">
         <xsd:complexType>
            <xsd:sequence>
               <xsd:element name="user" type="xsdcd:userType" minOccurs="0"/>
               <xsd:element name="protocol" type="xsd:string"/>
               <xsd:element name="plug" type="xsdcd:plugType"/>
            </xsd:sequence>
         </xsd:complexType>
      </xsd:element>
      <xsd:complexType name="userType">
         <xsd:sequence>
            <xsd:element name="login" type="xsd:string" minOccurs="0"/>
            <xsd:element name="password" type="xsd:string" minOccurs="0"/>
            <xsd:element name="ticket" type="xsd:string" minOccurs="0"/>
            <xsd:element name="mdpdiff" type="xsd:string" minOccurs="0"/>
         </xsd:sequence>
      </xsd:complexType>
 
      <xsd:complexType name="plugType">
         <xsd:sequence>
            <xsd:element name="mac" type="xsd:string" minOccurs="0"/>
            <xsd:element name="building" type="xsd:string" minOccurs="0"/>
            <xsd:element name="room" type="xsd:int" minOccurs="0"/>
            <xsd:element name="side" type="xsd:int" minOccurs="0"/>
            <xsd:element name="number" type="xsd:int" minOccurs="0"/>
            <xsd:element name="ip" type="xsd:string" minOccurs="0"/>
            <xsd:element name="port" type="xsd:string" minOccurs="0"/>
            <xsd:element name="vlip" type="xsd:string" minOccurs="0"/>
            <xsd:element name="vlip6" type="xsd:string" minOccurs="0"/>
         </xsd:sequence>
      </xsd:complexType>
Et la version en php qui marche parfaitement :

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
 
<?php
$soap = new SoapClient("http://cerbere.via.ecp.fr/connectd/connectd.wsdl");
$request=array(
        'user'=>array(
                'login'=>'corum',
                'password'=>'*****'
        ),
        'plug'=>array(
                'building'=>'C',
                'room'=>324
        ),
        'protocol'=>'telnet'
);
print_r($soap->__call('status',array('request'=>$request)));
?>
Est ce que quelqu'un a une idée d'ou ca peut venir ? Et comment peut on voir le XML de la requète SOAP ?