Blog
Skip to end of metadata
Go to start of metadata

Az AndroidSOAP projekt feltámadni látszik, lett egy lelkes committer, aki végzett némi önkéntes munkát, egyelőre tetszik neki a működésmód:

This is a great library. I found it to be more usable then ksoap2.

Úgy látszik ez a kis vakarcska projektem működik másnak is, pedig az projekt mérete alig haladta meg a kétezer sort, alighanem ez a legkisebb WebService kliens, amely bizonyos körülmények között egész jól működik – a szabványnak való teljes megfelelés igénye nélkül. Úgy gondoltam, hogy csinálok néhány tesztet, elsőként az MNB árfolyam lekérdezést néztem meg... nem kellett volna.

A kliens osztályok generálása után azt hittem, hogy valamit rosszul állítottam be, de nem... minden mező – legyen az a kérésben vagy a válaszban – egyszerű String. Ez önmagában nem probléma, hiszen könnyen lehet konvertálni szövegből számmá, vagy akár dátumból szöveggé. A problémát az okozza, hogy a legegyszerűbb 'getCurrencies' kérésre is az alábbi válasz jön:

GetCurrenciesResponse
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <GetCurrenciesResponse xmlns="http://www.mnb.hu/webservices/">
         <GetCurrenciesResult><![CDATA[<MNBCurrencies><Currencies>
<Curr>ATS</Curr><Curr>AUD</Curr><Curr>AUP</Curr><Curr>BEF</Curr><Curr>BGL</Curr>
<Curr>BGN</Curr><Curr>BRL</Curr><Curr>CAD</Curr><Curr>CHF</Curr><Curr>CNY</Curr>
<Curr>CYN</Curr><Curr>CZK</Curr><Curr>CSD</Curr><Curr>CSK</Curr><Curr>DDM</Curr>
<Curr>DEM</Curr><Curr>DKK</Curr><Curr>EEK</Curr><Curr>EGP</Curr><Curr>ESP</Curr>
<Curr>EUR</Curr><Curr>FIM</Curr><Curr>FRF</Curr><Curr>GBP</Curr><Curr>GHP</Curr>
<Curr>GRD</Curr><Curr>HKD</Curr><Curr>HRK</Curr><Curr>IEP</Curr><Curr>INR</Curr>
<Curr>ISK</Curr><Curr>ITL</Curr><Curr>JPY</Curr><Curr>KPW</Curr><Curr>KRW</Curr>
<Curr>KWD</Curr><Curr>LBP</Curr><Curr>LTL</Curr><Curr>LUF</Curr><Curr>LVL</Curr>
<Curr>MNT</Curr><Curr>MXN</Curr><Curr>NLG</Curr><Curr>NOK</Curr><Curr>NZD</Curr>
<Curr>OAL</Curr><Curr>OBL</Curr><Curr>OFR</Curr><Curr>ORB</Curr><Curr>PKR</Curr>
<Curr>PLN</Curr><Curr>PTE</Curr><Curr>ROL</Curr><Curr>RON</Curr><Curr>RSD</Curr>
<Curr>RUB</Curr><Curr>SDP</Curr><Curr>SEK</Curr><Curr>SGD</Curr><Curr>SIT</Curr>
<Curr>SKK</Curr><Curr>SUR</Curr><Curr>TRY</Curr><Curr>UAH</Curr><Curr>USD</Curr>
<Curr>VND</Curr><Curr>XEU</Curr><Curr>XTR</Curr><Curr>YUD</Curr><Curr>ZAR</Curr>
</Currencies></MNBCurrencies>]]></GetCurrenciesResult>
      </GetCurrenciesResponse>
   </soap:Body>
</soap:Envelope>

A sortöréseket már én tettem bele, de ez így ebben a formában jött: CDATA oszt' mazsolázd ki az XML-ből, amire szükséged van – természetesen használati útmutatót nem adunk, a műsorváltozás jogát pedig fenntartjuk. Ez így nem WebService kéremszépen, ez így híg fos. Ha változik az interfész, akkor valódi WebService esetén csak újragenerálom a kliens osztályokat, és használom az új fejlesztéseket – ha ezek az új fejlesztéseket nem használom, ám visszafelé kompatibilisek, vagyis csak hozzáadtak az interfészhez, de nem vettek el belőle, akkor még újra se kell generálnom a kliens osztályaim. Ha az MNB kitalálja, hogy hétfőtől kezdve nem Curr, hanem Currency közé zárja az adott pénznem nevét, akkor bizony elő kell venni a megírt XML feldolgozót és kézzel átjavítgatni mindenhol... agyrém.

Ugyanezt találjuk akkor is, amikor lekérdezzük az árfolyamokat:

GetCurrentExchangeRatesResponse
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/">
         <GetCurrentExchangeRatesResult><![CDATA[<MNBCurrentExchangeRates><Day date="2011-01-07">
<Rate curr="AUD" unit="1">211,64</Rate><Rate curr="BGN" unit="1">141,64</Rate><Rate curr="BRL" unit="1">126,53</Rate>
<Rate curr="CAD" unit="1">213,37</Rate><Rate curr="CHF" unit="1">221,47</Rate><Rate curr="CNY" unit="1">32,2</Rate>
<Rate curr="CZK" unit="1">11,23</Rate><Rate curr="DKK" unit="1">37,19</Rate><Rate curr="EEK" unit="1">17,73</Rate>
<Rate curr="EUR" unit="1">277,11</Rate><Rate curr="GBP" unit="1">329,8</Rate><Rate curr="HKD" unit="1">27,45</Rate>
<Rate curr="HRK" unit="1">37,43</Rate><Rate curr="ISK" unit="1">1,81</Rate><Rate curr="JPY" unit="100">255,55</Rate>
<Rate curr="KRW" unit="100">18,96</Rate><Rate curr="LTL" unit="1">80,25</Rate><Rate curr="LVL" unit="1">395,28</Rate>
<Rate curr="MXN" unit="1">17,44</Rate><Rate curr="NOK" unit="1">35,83</Rate><Rate curr="NZD" unit="1">161,57</Rate>
<Rate curr="PLN" unit="1">71,54</Rate><Rate curr="RON" unit="1">65,08</Rate><Rate curr="RSD" unit="1">2,61</Rate>
<Rate curr="RUB" unit="1">6,94</Rate><Rate curr="SEK" unit="1">31,05</Rate><Rate curr="SGD" unit="1">164,33</Rate>
<Rate curr="TRY" unit="1">136,67</Rate><Rate curr="UAH" unit="1">26,78</Rate><Rate curr="USD" unit="1">213,41</Rate>
<Rate curr="ZAR" unit="1">31,28</Rate></Day></MNBCurrentExchangeRates>]]></GetCurrentExchangeRatesResult>
      </GetCurrentExchangeRatesResponse>
   </soap:Body>
</soap:Envelope>

Látszik ebben az esetben is, hogy nem kicsi XML tartalomhoz kell feldolgozót írnunk, mivel a GetCurrentExchangeRatesResult típusa nem a benne lévő struktúra, hanem 'string', amelyet aztán meg kell etetnünk egy XML feldolgozóval, majd bele kell drótoznunk a programba az XML adatokat bevezető tag-ek nevét és persze a bennük lévő attribútumokat.

Költői kérdés

Kedves MNB, nem lehetne olyat 2011-ben, hogy normális WebService interfészen szolgáltasson? Ez így arra jó, hogy megutálja a WebService használatát az a fejlesztő, aki ez esetben találkozik először WebService technológiákkal.

      
      
Page viewed times

1 Comment

  1. Ezt részben már megvitattuk a tesztelés blogon, persze érdemi változást nem hozott. Egyébként Hofi jut eszembe

    ez így híg fos

    De ha összeáll szar is lehet belőle.

#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))