1 #!/usr/bin/env python 2 # -*- coding: iso-8859-15 -*- 3 4 import libxml2dom.soap 5 6 request = """<?xml version='1.0' encoding='iso-8859-1'?> 7 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > 8 <env:Header> 9 <t:transaction 10 xmlns:t="http://thirdparty.example.org/transaction" 11 env:encodingStyle="http://example.com/encoding" 12 env:mustUnderstand="true" >5</t:transaction> 13 </env:Header> 14 <env:Body> 15 <m:chargeReservation 16 env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" 17 xmlns:m="http://travelcompany.example.org/"> 18 <m:reservation xmlns:m="http://travelcompany.example.org/reservation"> 19 <m:code>FT35ZBQ</m:code> 20 </m:reservation> 21 <o:creditCard xmlns:o="http://mycompany.example.com/financial"> 22 <n:name xmlns:n="http://mycompany.example.com/employees"> 23 ?ke J?gvan ?yvind 24 </n:name> 25 <o:number>123456789099999</o:number> 26 <o:expiration>2005-02</o:expiration> 27 </o:creditCard> 28 </m:chargeReservation> 29 </env:Body> 30 </env:Envelope>""" 31 32 req = libxml2dom.soap.parseString(request) 33 assert req.methodName == "chargeReservation" 34 assert req.parameterValues == [ 35 [("code", "FT35ZBQ")], 36 [("name", u"?ke J?gvan ?yvind"), ("number", "123456789099999"), ("expiration", "2005-02")] 37 ] 38 assert req.fault is None 39 print "Method name:", req.methodName 40 print "Parameter values:", req.parameterValues 41 print "Fault:", req.fault 42 43 response = """<?xml version='1.0' encoding='iso-8859-1'?> 44 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > 45 <env:Header> 46 <t:transaction 47 xmlns:t="http://thirdparty.example.org/transaction" 48 env:encodingStyle="http://example.com/encoding" 49 env:mustUnderstand="true">5</t:transaction> 50 </env:Header> 51 <env:Body> 52 <m:chargeReservationResponse 53 env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" 54 xmlns:m="http://travelcompany.example.org/"> 55 <m:code>FT35ZBQ</m:code> 56 <m:viewAt> 57 http://travelcompany.example.org/reservations?code=FT35ZBQ 58 </m:viewAt> 59 </m:chargeReservationResponse> 60 </env:Body> 61 </env:Envelope>""" 62 63 resp = libxml2dom.soap.parseString(response) 64 assert resp.methodName == "chargeReservationResponse" 65 assert resp.parameterValues == [("code", "FT35ZBQ"), ("viewAt", "http://travelcompany.example.org/reservations?code=FT35ZBQ")] 66 assert resp.fault is None 67 print "Method name:", resp.methodName 68 print "Parameter values:", resp.parameterValues 69 print "Fault:", resp.fault 70 71 response2 = """<?xml version='1.0' encoding='iso-8859-1'?> 72 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > 73 <env:Header> 74 <t:transaction 75 xmlns:t="http://thirdparty.example.org/transaction" 76 env:encodingStyle="http://example.com/encoding" 77 env:mustUnderstand="true">5</t:transaction> 78 </env:Header> 79 <env:Body> 80 <m:chargeReservationResponse 81 env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" 82 xmlns:rpc="http://www.w3.org/2003/05/soap-rpc" 83 xmlns:m="http://travelcompany.example.org/"> 84 <rpc:result>m:status</rpc:result> 85 <m:status>confirmed</m:status> 86 <m:code>FT35ZBQ</m:code> 87 <m:viewAt> 88 http://travelcompany.example.org/reservations?code=FT35ZBQ 89 </m:viewAt> 90 </m:chargeReservationResponse> 91 </env:Body> 92 </env:Envelope>""" 93 94 resp2 = libxml2dom.soap.parseString(response2) 95 assert resp2.methodName == "chargeReservationResponse" 96 assert resp2.parameterValues == [ 97 ("result", "m:status"), ("status", "confirmed"), ("code", "FT35ZBQ"), 98 ("viewAt", "http://travelcompany.example.org/reservations?code=FT35ZBQ") 99 ] 100 assert resp2.fault is None 101 print "Method name:", resp2.methodName 102 print "Parameter values:", resp2.parameterValues 103 print "Fault:", resp2.fault 104 105 failed = """<?xml version='1.0' encoding='iso-8859-1'?> 106 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 107 xmlns:rpc='http://www.w3.org/2003/05/soap-rpc'> 108 <env:Body> 109 <env:Fault> 110 <env:Code> 111 <env:Value>env:Sender</env:Value> 112 <env:Subcode> 113 <env:Value>rpc:BadArguments</env:Value> 114 </env:Subcode> 115 </env:Code> 116 <env:Reason> 117 <env:Text xml:lang="en-US">Processing error</env:Text> 118 <env:Text xml:lang="cs">Chyba zpracov?n?</env:Text> 119 </env:Reason> 120 <env:Detail> 121 <e:myFaultDetails 122 xmlns:e="http://travelcompany.example.org/faults"> 123 <e:message>Name does not match card number</e:message> 124 <e:errorcode>999</e:errorcode> 125 </e:myFaultDetails> 126 </env:Detail> 127 </env:Fault> 128 </env:Body> 129 </env:Envelope>""" 130 131 f = libxml2dom.soap.parseString(failed) 132 assert f.methodName is None 133 assert f.parameterValues == [] 134 assert f.fault.code == "env:Sender" 135 assert f.fault.subcode == "rpc:BadArguments" 136 print "Method name:", f.methodName 137 print "Parameter values:", f.parameterValues 138 print "Fault code:", f.fault.code 139 140 # vim: tabstop=4 expandtab shiftwidth=4