Programmēšana

Piekļūstiet tīmekļa pakalpojumiem, izmantojot bezvadu ierīces

Kā es apspriedu pirmajā Bezvadu Java sleja "Java pati nolasa bezvadu tīmekļa pakalpojumiem", XML apstrādes iespējas ir viena no galvenajām prasībām bezvadu tīmekļa pakalpojumu lietojumprogrammām. Tomēr standarta J2ME / MIDP (Java 2 platforma, Micro Edition / Mobile Information Device Profile) specifikācijā trūkst standarta XML API, kas arī nav iekļauti gaidāmajā MIDP 2.0 specifikācijā. Tādējādi mums ir nepieciešamas trešo pušu J2ME / CLDC (Connected Limited Device Configuration) bibliotēkas, kas spēj apstrādāt XML, īpaši tie tīmekļa pakalpojumiem raksturīgie XML protokoli.

Šajā rakstā es apspriedīšu, kā apstrādāt tīmekļa pakalpojumu ziņojumus, izmantojot atvērtā koda kSOAP pakotni J2ME / MIDP platformā. Tāpat kā daudzas citas uzņēmuma skaitļošanas arhitektūras, arī Web pakalpojumi ietver gan klientus, gan serverus. Tā kā daudzās diskusijās galvenā uzmanība tiek pievērsta tam, kā izmantot J2EE (Java 2 Platform, Enterprise Edition), lai izstrādātu un izvietotu tīmekļa pakalpojumus servera pusē, šajā rakstā es koncentrējos tikai uz J2ME klienta pusi.

Ziepju priekšrocība

Svarīgs XML protokols piekļuvei tīmekļa pakalpojumiem ir SOAP (vienkāršs objekta piekļuves protokols). Salīdzinot ar konkurējošām tehnoloģijām, SOAP ir šādas priekšrocības:

  1. Izmantojot XML shēmu, SOAP definē vairāk nekā 40 standarta datu tipus un ļauj lietotājiem pielāgoti definēt sarežģītus datu tipus. Šāds izsmalcināts datu tipa atbalsts padara SOAP par spēcīgu un bagātīgu valodu informācijas apmaiņai starp mūsdienu plaši izvietotajām objektorientētajām sistēmām.
  2. Papildus spēcīgam datu tipa atbalstam SOAP atbalsta arī dažādas ziņojumapmaiņas shēmas. Šīs shēmas ietver sinhronos attālās procedūras izsaukumus (RPC), asinhronos ziņapmaiņas ziņojumus, multiziņu ziņojumapmaiņu (abonēšanu) un sarežģītus ziņojumu maršrutus ar vairākiem starpniekiem.
  3. Tā kā SOAP ir ieguvis galveno atbalstu kā tīmekļa pakalpojumu ziņojumapmaiņas standartu, lielākajai daļai citu tīmekļa pakalpojumu protokolu ir jāsadarbojas vai jāsaista SOAP. Piemēram, WSDL (Web Services Description Language), UDDI (Universal Description, Discovery and Integration) un lielākā daļa XML reģistru atbalsta SOAP; XML digitālais paraksts, XML šifrēšana, SAML (Security Assertion Markup Language) un citi droši XML protokoli nodrošina standarta saistīšanu ar SOAP. Katrs saistošais protokols nodrošina sava īpašā elementa sintaksi SOAP ziņojumos. Pilns SOAP atbalsts XML nosaukumvietām ir atvieglojis saistīšanu ar citiem protokoliem.

Iepriekš minēto priekšrocību dēļ SOAP jau ir visplašāk izmantotais tīmekļa pakalpojumu komunikācijas protokols. Tātad bezvadu tīmekļa pakalpojumu lietojumprogrammas pamatprasība ir spēja saprast SOAP ziņojumus. Tagad aplūkosim dažus vienkāršus SOAP piemērus. 1. saraksts parāda vienkāršu, vispārīgu SOAP ziņojumu:

Saraksts 1. Hello World SOAP ziņojums

  Sveika pasaule 

SOAP visplašāk tiek izmantots tīmekļa pakalpojumu RPC. SOAP atbildes ziņojums no tīmekļa pakalpojumu RPC parasti satur atgriešanās vērtības a Rezultāts elements zem ziepēm Ķermenis elements. 2. saraksts parāda vienkāršu SOAP RPC atbildes ziņojumu:

Saraksts 2. Hello World SOAP RPC atbildes ziņojums

   Sveika pasaule 

Tā kā mūsu programmās mums programmatiski jāpiekļūst SOAP ziņojumiem, mums ir nepieciešams SOAP parsētājs.

Kas ir SOAP parsēšana?

Katrs vispārējs XML parsētājs ar nosaukumvietas atbalstu saprot SOAP ziņojumus un var no tiem iegūt informāciju. Teorētiski mēs vienmēr varam iegūt teksta informāciju no SOAP ziņojuma, izmantojot vispārēju XML parsētāju, un pēc tam šīs teksta virknes pārveidot par Java datu objektiem, kad mums tie ir jāizmanto. Piemēram, int i = Integer.parseInt ("123"); pārveido teksta virkni "123" līdz veselam skaitlim 123. Bet šāda manuāla pārveidošana apgrūtina lietojumprogrammu programmētājus. Java datu objektu izvilkšana tieši no SOAP ziņojuma nodrošinātu labāku pieeju. Ievadiet SOAP parsētāju.

SOAP parsētājs ir veidots uz vispārēja XML parsētāja ar īpašiem tipa kartēšanas un teksta datu marķēšanas mehānismiem. SOAP parsētājs saprot datu veida informāciju SOAP ziņojumos un automātiski pārveido SOAP ziņojumu Java datu objektiem. Parsētāja patiesā vērtība ir tā, ka tā nodrošina programmēšanas pārredzamību starp Java programmu un SOAP ziņojumu. Programmētājs vienkārši ievada Java objektus SOAP rakstītājā, nosūta ziņojumu, gaida servera atbildi un pēc tam nolasa Java objektus tieši no SOAP parsētāja.

Kā es apspriedu, SOAP piedāvā bagātīgu funkciju kopumu. Daudzi uzskata SOAP parsēšanas atbalstu ar resursiem ierobežotās bezvadu platformās, piemēram, J2ME / CLDC, par dārgu. Pastāv arī praktiskas grūtības:

  1. Vieglā J2ME / CLDC platforma upurē daudzas noderīgas standarta Java funkcionalitātes lielumam un ātrumam. Rezultātā J2ME / CLDC platformai ir tikai ierobežota virkņu funkcionalitāte, kas ir liela problēma katram bezvadu Java XML parsētājam.
  2. SOAP parsēšanai ir nepieciešams, lai parsētājs nolasa visu dokumentu atmiņā. Bet lielākā daļa J2ME / CLDC parsētāju ir atmiņā efektīvi lineāri SAX parsētāji, kas nekad nekonstruē atmiņas objektu modeļus.
  3. J2ME / CLDC platformai trūkst atbalsta dažiem pamata datu tipiem, piemēram, Peldēt tips.

Par laimi, projekts kSOAP atrisina šīs problēmas un nodrošina SOAP risinājumu mazām ierīcēm.

kSOAP glābšanai

Pamatojoties uz slaveno atvērtā pirmkoda vispārējo XML parsētāju kXML, Enhydra.org ir uzsācis atvērtā koda projektu SOAP parsēšanai J2ME / MIDP platformās - kSOAP projektu. Daļu no EnhydraME projekta kSOAP ir izstrādājusi izstrādātāju grupa, kuru vada Stefans Hausteins. Enhydra 2001. gada maijā izlaida kSOAP pirmo alfa versiju. Pēc gada ilga izstrādes kSOAP, kas tagad ir 1.2 versijā, atbalsta SOAP 1.2 galveno funkciju kopumu. Šī raksta piemēri un arhitektūras diskusijas attiecas uz kSOAP versiju 0.95 un jaunākām versijām (pilnu avota kodu skatiet sadaļā Resursi). Kods darbojas MIDP vidē; ja MIDP izstrāde jums ir jauna vai jums ir jāatsvaidzina prasmes, skatiet Maikla Cimermana sēriju "Ierīču programmēšana ar MIDP".

Šis koda segments parsē Hello World piemērus, izmantojot kSOAP:

ByteArrayInputStream bis = new ByteArrayInputStream (mesg.getBytes ()); InputStreamReader lasītājs = jauns InputStreamReader (bis); XmlParser xp = jauns XmlParser (lasītājs); // Izmantot noklusējuma kartēšanu starp Java objektiem un Ziepju elementiem SoapEnvelope aploksne = new SoapEnvelope (jauna ClassMap (Soap.VER12)); aploksne.parse (xp); 

Virknes mainīgais mesg glabā visu SOAP dokumentu.

Tagad mums ir jāizgūst ziņojums no parsētās SOAP aploksne. Šis kods izgūst pirmo bērnu saskaņā ar SOAP Ķermenis elements:

// Hello World Listing 1 virknes rezultāts = (virkne) aploksne.getBody (); 

Lietojot Hello World 1. sarakstam, rezultāts satur virknes vērtību Sveika pasaule.

Šis nākamais koda segments izgūst pirmo mazbērnu zem SOAP Ķermenis elements:

// Hello World Listing 2 virknes rezultāts = (virkne) aploksne.getResult (); 

The SoapEnvelope.getResult () metode ērti izgūst vērtības no SOAP RPC atbildes ziņojumiem, piemēram, Hello World in Listing 2. Tomēr, kā jau teicu, SOAP parsētāja galvenā vērtība slēpjas nevis spējā izgūt teksta virknes no SOAP dokumenta, bet gan spējā kartēt SOAP XML elementi Java objektiem. Pārbaudīsim, kā kSOAP sasniedz šo kartēšanu.

kSOAP objektu struktūra

SOAP ziņojumā elements xsi: tips atribūts norāda XML elementa satura datu tipu. Piemēram, 123 norāda veselu skaitli 123 un 123 norāda virknes vērtību "123".

kSOAP četrus SOAP veidus automātiski piesaista Java tipiem saskaņā ar šādu sarakstu:

Noklusējuma veida kartēšana
ZIEPES tipsJava tips
xsd: starpjava.lang.Integer
xsd: garšjava.lang.Long
xsd: virknejava.lang.Strings
xsd: būlajava.lang.Boolean
$config[zx-auto] not found$config[zx-overlay] not found