Programovanie

Prístup k webovým službám z bezdrôtových zariadení

Ako som už diskutoval v prvom Bezdrôtová Java stĺpec „Java sa pripravuje pre bezdrôtové webové služby“ predstavuje schopnosť spracovania XML jednu z kľúčových požiadaviek pre aplikácie bezdrôtových webových služieb. V štandardnej špecifikácii J2ME / MIDP (Java 2 Platform, Micro Edition / Mobile Information Device Profile) však chýbajú štandardné rozhrania XML API, ktoré nie sú zahrnuté ani v pripravovanej špecifikácii MIDP 2.0. Preto potrebujeme knižnice J2ME / CLDC (Connected Limited Device Configuration) tretích strán, ktoré dokážu spracovať XML, najmä tie protokoly XML špecifické pre webové služby.

V tomto článku diskutujem o tom, ako spracovávať správy webových služieb pomocou balíka kSOAP otvoreného zdroja na platforme J2ME / MIDP. Rovnako ako mnoho iných architektúr podnikových výpočtov, aj webové služby zahŕňajú klientov aj servery. Pretože veľa diskusií sa zameriava na to, ako používať J2EE (Java 2 Platform, Enterprise Edition) na vývoj a nasadenie webových služieb na strane servera, v tomto článku sa zameriavam iba na stranu klienta J2ME.

Výhoda protokolu SOAP

Dôležitým protokolom XML pre prístup k webovým službám je SOAP (Simple Object Access Protocol). V porovnaní s konkurenčnými technológiami má SOAP nasledujúce výhody:

  1. SOAP definuje viac ako 40 štandardných dátových typov prostredníctvom schémy XML a umožňuje používateľom definovať vlastné komplexné dátové typy. Takáto sofistikovaná podpora dátových typov robí z protokolu SOAP výkonný a bohatý jazyk na výmenu informácií medzi dnešnými široko nasadenými objektovo orientovanými systémami.
  2. Okrem silnej podpory dátových typov podporuje SOAP aj rôzne schémy zasielania správ. Tieto schémy zahŕňajú synchrónne vzdialené volania procedúr (RPC), asynchrónne zasielanie správ, správy multicastových správ (predplatné) a zložité trasy správ s viacerými sprostredkovateľmi.
  3. Pretože protokol SOAP získal podporu hlavného prúdu ako štandard pre zasielanie správ webových služieb, väčšina ostatných protokolov webových služieb musí s protokolom SOAP spolupracovať alebo sa na ne viazať. Napríklad WSDL (Web Services Description Language), UDDI (Universal Description, Discovery a Integration) a väčšina registrov XML podporuje protokol SOAP; Digitálny podpis XML, šifrovanie XML, SAML (Security Assertion Markup Language) a ďalšie zabezpečené protokoly XML - to všetko poskytuje štandardnú väzbu s protokolom SOAP. Každý protokol väzby poskytuje syntax svojho vlastného špeciálneho prvku vo vnútri správ SOAP. Plná podpora protokolu SOAP pre menné priestory XML uľahčila naviazanie na iné protokoly.

Kvôli vyššie uvedeným výhodám je SOAP už najpoužívanejším komunikačným protokolom pre webové služby. Kľúčovou požiadavkou pre aplikáciu bezdrôtových webových služieb je teda schopnosť porozumieť správam SOAP. Teraz sa pozrime na niekoľko jednoduchých príkladov SOAP. Výpis 1 zobrazuje jednoduchú všeobecnú správu SOAP:

Zoznam 1. Správa SOAP Hello World

  Ahoj svet 

SOAP sa najbežnejšie používa v RPC webových služieb. Správa s odpoveďou SOAP z RPC webových služieb zvyčajne obsahuje návratové hodnoty vo vnútri a Výsledok prvok pod SOAP Telo element. Výpis 2 zobrazuje jednoduchú správu s odpoveďou SOAP RPC:

Výpis 2. Odpoveďová správa Hello World SOAP RPC

   Ahoj svet 

Pretože v našich programoch musíme programovo pristupovať k správam SOAP, potrebujeme analyzátor SOAP.

Čo je analýza SOAP?

Každý generický analyzátor XML s podporou menného priestoru rozumie správam SOAP a môže z nich extrahovať informácie. Teoreticky môžeme kedykoľvek extrahovať textové informácie zo správy SOAP pomocou generického analyzátora XML a potom tieto textové reťazce previesť na dátové objekty Java, keď ich potrebujeme použiť. Napríklad, int i = Integer.parseInt ("123"); prevádza textový reťazec "123" na celočíselnú hodnotu 123. Ale takáto manuálna konverzia zaťažuje programátorov aplikácií. Lepší prístup by poskytla extrakcia údajových objektov Java priamo zo správy SOAP. Zadajte analyzátor SOAP.

Analyzátor SOAP je založený na generickom analyzátore XML so špeciálnymi mechanizmami mapovania typov a zaraďovania textových údajov. Analyzátor SOAP rozumie informáciám údajového typu v správach SOAP a automaticky prevádza správu SOAP na dátové objekty Java. Skutočnou hodnotou syntaktického analyzátora je, že poskytuje transparentnosť programovania medzi programom Java a správou SOAP. Programátor iba podáva objekty Java do zapisovača SOAP, odosiela správu, čaká na odpoveď servera a potom číta objekty Java priamo z analyzátora SOAP.

Ako som už spomínal, SOAP obsahuje bohatú sadu funkcií. Mnohí považujú podporu analýzy SOAP na bezdrôtových platformách s obmedzeným zdrojom, ako je J2ME / CLDC, za nákladnú. Existujú aj praktické ťažkosti:

  1. Ľahká platforma J2ME / CLDC obetuje veľa užitočných štandardných funkcií Java pre svoju veľkosť a rýchlosť. Výsledkom je, že platforma J2ME / CLDC má iba obmedzenú funkčnosť reťazcov, čo je veľkým problémom každého bezdrôtového analyzátora Java XML.
  2. Analýza SOAP vyžaduje, aby syntaktický analyzátor prečítal celý dokument do pamäte. Ale väčšina analyzátorov J2ME / CLDC sú pamäťovo efektívne lineárne analyzátory SAX, ktoré nikdy nekonštruujú modely objektov v pamäti.
  3. Platforma J2ME / CLDC nemá podporu pre niektoré základné dátové typy, napríklad Plavák typu.

Našťastie projekt kSOAP tieto problémy rieši a poskytuje riešenie SOAP pre malé zariadenia.

kSOAP na záchranu

Na základe svojho renomovaného generického analyzátora XML kXML s otvoreným zdrojom otvoril Enhydra.org projekt open source pre syntaktickú analýzu SOAP na platformách J2ME / MIDP - projekt kSOAP. V rámci projektu EnhydraME napísal kSOAP skupina vývojárov pod vedením Stefana Hausteina. Enhydra vydala prvú alfa verziu kSOAP v máji 2001. Po roku vývoja kSOAP, teraz vo verzii 1.2, podporuje základnú sadu funkcií SOAP 1.2. Príklady a diskusie o architektúre tohto článku sa vzťahujú na kSOAP verzie 0.95 a vyššej (ďalšie zdroje nájdete v časti Zdroje). Kód beží v prostredí MIDP; ak ste vo vývoji MIDP nováčikom alebo si potrebujete osviežiť svoje zručnosti, pozrite si sériu Michaela Cymermana „Programovanie zariadení pomocou MIDP“.

Tento segment kódu analyzuje príklady Hello World pomocou kSOAP:

ByteArrayInputStream bis = nový ByteArrayInputStream (mesg.getBytes ()); Čítačka InputStreamReader = nový InputStreamReader (bis); XmlParser xp = nový XmlParser (čítačka); // Použiť predvolené mapovanie medzi objektmi Java a prvkami Soap SoapEnvelope envelope = new SoapEnvelope (new ClassMap (Soap.VER12)); obálka.parse (xp); 

Premenná reťazca mesg uloží celý dokument SOAP.

Teraz musíme správu získať z analyzovaného protokolu SOAP obálka. Nasledujúci kód načíta prvé dieťa v rámci SOAP Telo element:

// Pre zoznam Hello World 1 Výsledok reťazca = (String) envelope.getBody (); 

Pri použití na zoznam Hello World 1 výsledok obsahuje hodnotu reťazca Ahoj svet.

Tento ďalší segment kódu načíta prvého vnuka pod SOAP Telo element:

// Pre zoznam Hello World 2 String result = (String) envelope.getResult (); 

The SoapEnvelope.getResult () metóda pohodlne načítava hodnoty z odpovedí SOAP RPC, ako napríklad Hello World v zozname 2. Ako som však už uviedol, základná hodnota analyzátora SOAP nespočíva v jeho schopnosti načítať textové reťazce z dokumentu SOAP, ale v jeho schopnosti mapovať SOAP Prvky XML do objektov Java. Poďme preskúmať, ako kSOAP dosahuje toto mapovanie.

štruktúra objektov kSOAP

V správe SOAP prvok xsi: typ atribút určuje dátový typ obsahu prvku XML. Napríklad, 123 určuje celočíselnú hodnotu 123 a 123 určuje hodnotu reťazca "123".

kSOAP automaticky mapuje štyri typy SOAP na typy Java podľa nasledujúceho zoznamu:

Predvolené mapovanie typu
Typ SOAPTyp Java
xsd: intjava.lang.Integer
xsd: dlhojava.lang.Dlhé
xsd: reťazecjava.lang.String
xsd: booleanjava.lang.Boolean
$config[zx-auto] not found$config[zx-overlay] not found