Bonjour à tous et à toutes.
Dans le cadre d'un stage je dois commencer le développement d'un web-service en SOAP, Php et WDL. Bon, php, je gère pas trop mal, mais SOAP et WSLD et SOAP, je ne commençais pas du tout avant de me plonger dans la doc il y a déjà quelques jours de cela et je galère un petit peu, même pour des exemple tout simple.

J'ai donc tentés deux ou trois trucs pas trop compliqués (en théorie), et je commence petit à petit à comprendre l'architecture de la chose. Seulement je me retrouve confrontés à quelques problèmes, sans doute bénins, mais je ne sais pas trop par où chercher.

Le premier vient d'un problème d'ajout de fonction. En fait pour le moment j'ai instancié trois fonctions du coté server, le problème, c'est que lorsque je tente de les utiliser du coté client, elles me retournent exactement la même chose...

Voici le code du server :
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
 
<?php
	//Connection à la base mysl
	include_once("connexionBase.php") ;
	include_once("doctorant.class.php") ;
	//include_once("anneeUniversitaire.class.php") ;
 
	// première étape : désactiver le cache lors de la phase de test (pour éviter des problèmes si changement du fichier wsdl)
	ini_set("soap.wsdl_cache_enabled", "0");
 
	// on indique au serveur à quel fichier de description il est lié
	$serveurSOAP = new SoapServer('essai.wsdl');
 
	// ajouter les fonctions au serveur
	$serveurSOAP->addFunction(SOAP_FUNCTIONS_ALL);
 
	// lancer le serveur
	if ($_SERVER['REQUEST_METHOD'] == 'POST'){
		$serveurSOAP->handle();
	}else{
		echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
	}
 
 
 
	function  getAnneeUniversitaireById($id){
		return 'Hello ceci est une fonction pour recuperer les annees universitaire par id : '.$id;
		$testDoc = new Doctorant() ;
	}
 
	function getAllInscriptionAdministrativeByThese($param1, $param2){
		return 'Ceci est la fonction des inscription administrative par these avec en paramètre : '.$param1.' , '.$param2.'';
		$testDoc = new Doctorant() ;
	}
 
	function getAllAnneeUniversitaire(){
		return 'Ceci est la fonction pour recuperer les année suniversitaires';
		$testDoc = new Doctorant() ;
	}
?>
Le 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
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
 
<?php
	// première étape : désactiver le cache lors de la phase de test
	ini_set("soap.wsdl_cache_enabled", "0");
 
	// lier le client au fichier WSDL
	$clientSOAP = new SoapClient('essai.wsdl');
 
	echo '<pre>' ;
		//print_r($_SERVER).'<br/><br/>' ;
		//print_r($_POST).'<br/><br/>' ;
	echo '</pre>' ;
 
	/* $test = new stdClass() ;
	$test->code = "FR" ;
	$test->libelle = "France" ;
	$test->nationalite = "Française" ; */
 
	$essai1 = 'these' ;
	$essai2 = 'essai' ;
	$id=1;
 
 
	 var_dump($clientSOAP->__getFunctions()); //Affiche les fonctions disponibles
	// var_dump($clientSOAP->__getTypes());   //Affiche tous les types du wsdl
 
 
	echo '<pre>' ;
		//print_r($test) ;
		//print_r($testDoc) ;
	echo '</pre>' ;
 
 
	if(isset($_POST['id'])){
		$id = (htmlspecialchars($_POST['id']));
	}
	?>
 
 
	<form action="client2.php" method="post">
		<input type="text" name="id" value="<?php if( isset($_POST['id'])) echo htmlentities(trim($_POST['id'])); ?>">
		<input type="submit" name="valider1" value="Valider">
	</form>
 
 
<?php
	// executer les méthodes
	echo $clientSOAP->getAnneeUniversitaireById($id).'<br>';
	echo $clientSOAP->getAllInscriptionAdministrativeByThese($essai1, $essai2).'<br>';
	echo $clientSOAP->getAllAnneeUniversitaire();
 ?>
Et ce qui est concerné dans le fichier WSDl (parce que si je le met en entier ça va être vraiment trop long, déjà que ça l'est...)
Nb : Le fichier WSDL m'a été fourni et je n'y ait pas touché au niveau de la structure des données

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
<wsdl:definitions name="AdministratifServiceImplService" targetNamespace="http://webServices.amethis.cri.ubs.univ.fr/"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
		xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
		xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
		xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
		xmlns="http://schemas.xmlsoap.org/wsdl/">
	<wsdl:types>
		<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://localhost/soap/">
			<xs:complexType name="anneeUniversitaire"> 
				<xs:sequence>
					<xs:element name="actif" type="xs:boolean"/>
					<xs:element minOccurs="0" name="code" type="xs:string"/>
					<xs:element minOccurs="0" name="libelle" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>
 
			<xs:complexType name="inscriptionAdministrative">
				<xs:sequence>
					<xs:element minOccurs="0" name="adresse" type="tns:adresse"/>
					<xs:element maxOccurs="unbounded" minOccurs="0" name="aideFinanciere" nillable="true" type="tns:aideFinanciere"/>
					<xs:element minOccurs="0" name="anneeUniversitaire" type="tns:anneeUniversitaire"/>
					<xs:element name="ater" type="xs:boolean"/>
					<xs:element minOccurs="0" name="codeEcoleDoctorale" type="xs:string"/>
					<xs:element name="codeIndividuApogee" type="xs:int"/>
					<xs:element minOccurs="0" name="dateCreation" type="xs:dateTime"/>
					<xs:element minOccurs="0" name="equipeDeRecherche" type="tns:equipeDeRecherche"/>
					<xs:element minOccurs="0" name="etablissementAter" type="tns:etablissement"/>
					<xs:element minOccurs="0" name="etablissementCollecte" type="xs:string"/>
					<xs:element minOccurs="0" name="etatInscription" type="xs:string"/>
					<xs:element minOccurs="0" name="regimeInscription" type="tns:regimeInscription"/>
					<xs:element minOccurs="0" name="uniteDeRecherche" type="tns:uniteDeRecherche"/>
				</xs:sequence>
			</xs:complexType>
		<xs:element name="getAnneeUniversitaireById" type="tns:getAnneeUniversitaireById"/>
 
			<xs:complexType name="getAnneeUniversitaireById">
				<xs:sequence>
					<xs:element minOccurs="0" name="arg0" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>
 
			<xs:element name="getAnneeUniversitaireByIdResponse" type="tns:getAnneeUniversitaireByIdResponse"/>
 
			<xs:complexType name="getAnneeUniversitaireByIdResponse">
				<xs:sequence>
					<xs:element minOccurs="0" name="return" type="tns:anneeUniversitaire"/>
				</xs:sequence>
			</xs:complexType>
			<xs:element name="getAllInscriptionAdministrativeByThese" type="tns:getAllInscriptionAdministrativeByThese"/>
 
			<xs:complexType name="getAllInscriptionAdministrativeByThese">
				<xs:sequence>
					<xs:element minOccurs="0" name="arg0" type="xs:string"/>
					<xs:element name="arg1" type="xs:int"/>
				</xs:sequence>
			</xs:complexType>
 
			<xs:element name="getAllInscriptionAdministrativeByTheseResponse" type="tns:getAllInscriptionAdministrativeByTheseResponse"/>
 
			<xs:complexType name="getAllInscriptionAdministrativeByTheseResponse">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:inscriptionAdministrative"/>
				</xs:sequence>
			</xs:complexType>
 
			<xs:element name="getAllAnneeUniversitaire" type="tns:getAllAnneeUniversitaire"/>
 
			<xs:complexType name="getAllAnneeUniversitaire">
				<xs:sequence/>
			</xs:complexType>
 
			<xs:element name="getAllAnneeUniversitaireResponse" type="tns:getAllAnneeUniversitaireResponse"/>
 
			<xs:complexType name="getAllAnneeUniversitaireResponse">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:anneeUniversitaire"/>
				</xs:sequence>
			</xs:complexType>
		</xs:schema>
	</wsdl:types>
 
 
	<wsdl:portType name="AdministratifService">
		<wsdl:operation name="getAnneeUniversitaireById">
			<wsdl:input message="tns:getAnneeUniversitaireById" name="getAnneeUniversitaireById">
			</wsdl:input>
			<wsdl:output message="tns:getAnneeUniversitaireByIdResponse" name="getAnneeUniversitaireByIdResponse">
			</wsdl:output>
		</wsdl:operation>
 
		<wsdl:operation name="getAllInscriptionAdministrativeByThese">
			<wsdl:input message="tns:getAllInscriptionAdministrativeByThese" name="getAllInscriptionAdministrativeByThese">
			</wsdl:input>
			<wsdl:output message="tns:getAllInscriptionAdministrativeByTheseResponse" name="getAllInscriptionAdministrativeByTheseResponse">
			</wsdl:output>
		</wsdl:operation>
 
		<wsdl:operation name="getAllAnneeUniversitaire">
			<wsdl:input message="tns:getAllAnneeUniversitaire" name="getAllAnneeUniversitaire">
			</wsdl:input>
			<wsdl:output message="tns:getAllAnneeUniversitaireResponse" name="getAllAnneeUniversitaireResponse">
			</wsdl:output>
		</wsdl:operation>
	</wsdl:portType>
 
	<wsdl:binding name="AdministratifServiceImplServiceSoapBinding" type="tns:AdministratifService">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 
		<wsdl:operation name="getAnneeUniversitaireById">
			<soap:operation soapAction="" style="document"/>
			<wsdl:input name="getAnneeUniversitaireById">
				<soap:body use="literal"/>
			</wsdl:input>
 
			<wsdl:output name="getAnneeUniversitaireByIdResponse">
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
 
		<wsdl:operation name="getAllInscriptionAdministrativeByThese">
			<soap:operation soapAction="" style="document"/>
			<wsdl:input name="getAllInscriptionAdministrativeByThese">
				<soap:body use="literal"/>
			</wsdl:input>
 
			<wsdl:output name="getAllInscriptionAdministrativeByTheseResponse">
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
 
		<wsdl:operation name="getAllAnneeUniversitaire">
			<soap:operation soapAction="" style="document"/>
 
			<wsdl:input name="getAllAnneeUniversitaire">
				<soap:body use="literal"/>
			</wsdl:input>
 
			<wsdl:output name="getAllAnneeUniversitaireResponse">
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
</wsdl:definitions>
Bon le code n'est pas très propre et y'a un peu des commentaires de partout mais c'était pour tester... Si vous aviez des pistes (ou une solution à m'expliquer ) pour ce problème tout bête, je suis preneuse.

De même j'en profite pour demander, parce qu'on ne trouve pas vraiment énormément de documentation là-dessus, le système de classmap pour associer les compextype et les classes php. J'ai donc a classe suivante, comment puis-je la relier au fichier WSDL ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<?php
class anneeUniversitaire{
	public $actif ;
	public $code ;
	public $libelle ;
}
?>
Oui je sais mettre en public c'est mal mais pour l'instant c'est juste pour faire mes tests... Donc si vous avez une idée là-dessus aussi ^^


Voila, ça fait beaucoup à lire je suis désolé... Mais pas facile de se plonger là-dedans c'est dur de s'y retrouver parfois. Merci de votre (future) aide !