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 :
client PHP :
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<?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>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager