Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/09/2008, 15h34   #1
Membre du Club
 
Étudiant
Inscription : octobre 2006
Messages : 142
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2006
Messages : 142
Points : 44
Points : 44
Envoyer un message via MSN à caballero
Par défaut Gestion des Fault en PHP

Bonjour,

je suis actuellement sur un projet concernant le développement de Web Service en PHP... (Je n'ai qu'une expérience assez limité en Web Service)

J'utilise la librairie native de PHP5.

Mon soucis de faire en sorte de pouvoir gérer les exceptions (fault). J'arrive pas à les faire marcher malgré ce que j'ai pu lire... Si quelqu'un pouvais jeter un oeil...

(je précise que le Web Service fonctionne si je ne lance pas d'exceptions)

voici mes fichiers :


WSDL :
Code :
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
<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='StockQuote'
  targetNamespace='http://example.org/StockQuote'
  xmlns:tns=' http://example.org/StockQuote '
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>
 
	<types>
		<xsd:schema
			targetNamespace='http://example.org/StockQuote'
			xmlns:tns=' http://example.org/StockQuote '>
 
			<xsd:complexType name='DPPException'>
				<xsd:sequence>
					<xsd:element name="msg" type="xsd:string" minOccurs="0" />
				</xsd:sequence>
			</xsd:complexType>
 
            <xsd:element name="badRadio">
		         <xsd:complexType> 	
		            <xsd:complexContent>
		            	<xsd:extension base="tns:DPPsException" /> 
		            </xsd:complexContent>
		         </xsd:complexType>
			</xsd:element>   
        </xsd:schema>
	</types>
 
 
 
<wsdl:message name='getQuoteRequest'>
  <wsdl:part name='text' type='xsd:string'/>
  <wsdl:part name='text2' type='xsd:string'/>
</wsdl:message>
<wsdl:message name='getQuoteResponse'>
  <wsdl:part name='result' type='xsd:string'/>
</wsdl:message>
<wsdl:message name="badRadioMsg">
  <wsdl:part name="parameters" element="tns:badRadio" />
</wsdl:message>
 
<portType name='StockQuotePortType'>
  <wsdl:operation name='getQuote'>
    <wsdl:input message='tns:getQuoteRequest'/>
    <wsdl:output message='tns:getQuoteResponse'/>
    <wsdl:fault name="badRadio" message="tns:badRadioMsg" />
  </wsdl:operation>
</portType>
 
<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
  <soap:binding style='rpc'    transport='http://schemas.xmlsoap.org/soap/http'/>
  <wsdl:operation name='getQuote'>
    <soap:operation soapAction='urn:xmethods-delayed-quotes#getQuote'/>
    <wsdl:input>
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </wsdl:input>
    <wsdl:output>
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </wsdl:output>
    <wsdl:fault name="badRadio">
	  <soap:fault use="encoded" name="badRadio" namespace='urn:xmethods-delayed-quotes'  encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
	</wsdl:fault>
  </wsdl:operation>
</binding>
 
<service name='StockQuoteService'>
  <port name='StockQuotePort' binding='StockQuoteBinding'>
    <soap:address location='http://localhost/zend/server1.php'/>
  </port>
</service>
</definitions>
client PHP :
Code :
1
2
3
4
5
6
7
8
<?php
$client = new SoapClient("http://localhost/zend/stockquote.wsdl");
try {
  print($client->getQuote("Radio 1","novabis"));
} catch (SoapFault $fault) {
  echo $fault;
}
?>

server en PHP :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class QuoteService { 
 
 
  function getQuote($text,$text2) {
    if($text=="Radio 1")
      throw new SoapFault("Server","Radio 1 est pas bien");
    return $text . ', c\'est bien ';
  }
}
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$server = new SoapServer("stockquote.wsdl");
$server->setClass("QuoteService");
$server->handle();
?>


ps : l'implémentation actuelle n'est que expérimentale
caballero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2008, 11h40   #2
Membre du Club
 
Étudiant
Inscription : octobre 2006
Messages : 142
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2006
Messages : 142
Points : 44
Points : 44
Envoyer un message via MSN à caballero
J'ai pas mis le message reçu lorsque j'exécute mes scripts...

le voici :

Citation:
SoapFault exception: [SOAP-ENV:Server] Radio 1 est pas bien in Z:\**[mon chemin d'accès]**\Workspace\WSPHP\index.php:4 Stack trace: #0 [internal function]: SoapClient->__call('getQuote', Array) #1 Z:\USERS\tj\Workspace\WSPHP\index.php(4): SoapClient->getQuote('Radio 1', 'novabis') #2 {main}
Je suis toujours sur ce problème de savoir comment gérer les exceptions avec des Web Services pour du PHP...
caballero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2008, 17h01   #3
Membre du Club
 
Étudiant
Inscription : octobre 2006
Messages : 142
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2006
Messages : 142
Points : 44
Points : 44
Envoyer un message via MSN à caballero
Voila, en fait ce n'était pas une erreur que j'avais... (je ne pensais pas que le print de la fault me donnerai ce résultat)


Du coup, je reprend une partie de ma question : je voudrais pouvoir "typer mes fault" afin que le client puisse connaître quelle fault a été remontée.

Je pensais donc créer des classes héritant de SoapFault.. Mon problème est que je n'arrive pas à élaborer mes fichiers php et mon fichier wsdl de façon à ce que le typage soit pris en compte.

est ce que quelqu'un a déja effectué ce type de travail et pourrait m'indiquer si je suis sur la bonne voie ou pas parce que je ne trouve pas vraiment d'information la dessus
caballero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 16h22   #4
Nouveau Membre du Club
 
Étudiant
Inscription : décembre 2005
Messages : 60
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2005
Messages : 60
Points : 26
Points : 26
Je voulais faire comme toi utilise le natif soap de php5

Mais c'est beaucoup plus simple avec la librairie nusoap. Par contre je bute un peu...

Nusoap contrairement à soap de php5 va te générer tout seul le fichier wsdl. Ce qui un des gros points faible du natif de php5.
sacados1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h04.


 
 
 
 
Partenaires

Hébergement Web