Faili ya WSDL: inaliwa na nini? SabuniUi. Lugha ya Maelezo ya Huduma za Wavuti (WSDL): Andrew Troelsen

Dibaji

Wateja wa wateja waliuliza wateja faili za xsd kwa miundo iliyopitishwa na huduma za Wavuti zilizotekelezwa. Wateja walijibu kwa kuwaalika wateja wa wateja kuunda WSDL. Hiyo. ghafla, "nje ya bluu," hitaji liliibuka la kutengeneza sio tu schema za xsd za uthibitishaji wa data, lakini "WSDL nzima." Kawaida WSDL hutumiwa kwa SABUNI, lakini tunatumia REST...

Niliandika juu ya hapo awali

Utangulizi

Neno Huduma za Wavuti kwa kawaida huhusishwa na huduma za uendeshaji au vitendo kulingana na viwango vya SOAP au WS* kama vile WS-Addressing au WS-Security. Neno huduma za Wavuti za REST kwa kawaida hurejelea usanifu unaotegemea rasilimali wa huduma za Wavuti zinazowasiliana na XML kupitia HTTP. Kila moja ya mitindo hii ya usanifu ina mahali mwenyewe, lakini hadi hivi karibuni, kiwango cha WSDL hakikuunga mkono mitindo hii yote miwili. Ufungaji wa HTTP wa WSDL 1.1 haukutosha kuelezea mwingiliano nao kutumia XML kupitia HTTP, i.e. Hakukuwa na njia rasmi ya kuelezea huduma za Wavuti za REST kwa kutumia WSDL. Uchapishaji wa kiwango cha WSDL 2.0 (kilichotengenezwa kwa kuzingatia hitaji la kuelezea huduma za Wavuti za REST) ​​katika hali ya mapendekezo. Ulimwenguni Pote Muungano wa Wavuti (W3C) umetoa lugha ya kuelezea huduma za Wavuti za REST.

REST ni mtindo wa usanifu ambao unachukulia Wavuti kama programu inayozingatia rasilimali. Kwa kweli, hii inamaanisha kuwa kila URL katika programu ya RESTful inawakilisha rasilimali. URL ni rahisi kuelewa na kukumbuka. Kwa mfano, duka la vitabu linaweza kufafanua URL http://www.bookstore.com/books/ kwa orodha ya vitabu wanavyouza na http://www.bookstore.com/books/0321396855/ kwa maelezo kuhusu kitabu mahususi na ISBN 0321396855. Hii inatofautiana na programu-tumizi zinazozingatia hatua, kwa kawaida huwa na URL ndefu, changamano zinazoelezea vitendo vinavyopaswa kufanywa, kwa mfano http://www.bookstore.com/action/query?t=b&id=11117645532&qp=0321396855 . Vigezo vya swala hutumiwa kuchagua data inayohitajika. Kwa kutumia mfano wa duka la vitabu, kubainisha kigezo cha somo kunapunguza mada ya kitabu. Kwa mfano, hadithi za fizikia au za upelelezi, au kwa mfano URL http://www.bookstore.com/books/?subject=computers/eclipse - ombi la kurudisha orodha ya vitabu kuhusu jukwaa la Eclipse.

Neno REST lilianzishwa na Roy Fielding katika tasnifu yake ya PhD. Aliona viungo kama njia ya kubadilisha (kuhifadhi) hali ya maombi. Viungo huhifadhiwa katika rasilimali za maombi na ni njia ya kubadilisha hali ya maombi, kuelekeza kutoka hali moja hadi nyingine. Kwa kawaida viungo katika (X)HTML vinakusudiwa kutumiwa na binadamu; Kama tu (X)HTML, Huduma za Wavuti za REST hutumia viungo kwenye XML.

Programu za Kawaida za Wavuti hufikia rasilimali kupitia HTTP GET au operesheni za POST. Programu za RESTfull hufanya kazi na rasilimali katika mtindo wa "unda, soma, sasisha na ufute (CRUD)" kwa kutumia uwezo kamili Itifaki ya HTTP (POST, GET, PUT, na DELETE).

Mwingine kumbuka muhimu kuhusu programu RESTful: maombi RESTful lazima kuwa bila uraia. Hii inamaanisha kuwa programu ya REST haidumii hali yoyote ya kikao kwenye upande wa seva. Taarifa zote muhimu ili kukamilisha ombi hupitishwa katika ombi lenyewe. (Kwa hivyo, seva lazima ijibu maombi yanayorudiwa kwa njia sawa. Ujumbe wa Mtafsiri). Ipasavyo, mteja anaweza kuhifadhi rasilimali zilizopokelewa, ambazo zinaweza kuongeza kasi ya programu ambapo huduma inaruhusu kwa uwazi. Ili kujifunza zaidi kuhusu REST, angalia viungo vya makala.

WSDL na REST

WSDL ina maelezo yote kuhusu huduma ya tovuti ikijumuisha:

    URL ya huduma ya wavuti
    Mbinu za mawasiliano ambazo huduma ya wavuti inaelewa
    Operesheni ambazo huduma ya wavuti inaweza kufanya
    Muundo wa ujumbe wa huduma ya wavuti

Wateja wanaweza kutumia maelezo yaliyoorodheshwa ili kuingiliana na huduma.

WSDL 2.0 ilitangazwa kama pendekezo la W3C mnamo Juni 2007. Toleo hili la kiwango cha WSDL lilitolewa ili kushughulikia masuala ya kiwango cha WSDL 1.1, ambayo mengi yalitambuliwa na shirika. Huduma za Wavuti Mwingiliano (WS-I). Kwa kuongeza, WSDL 2.0 imeboreshwa Usaidizi wa HTTP vifungo

WSDL yenyewe ni XML, kitengo kidogo ambacho kinaelezea rasmi huduma ya wavuti. Fikiria maelezo ya WSDL ya huduma ya tovuti kama mkataba wake wa API na mteja. WSDL hubainisha anwani, mbinu zinazokubalika za kusambaza taarifa, violesura, na aina za ujumbe wa huduma ya tovuti. Kwa kifupi, maelezo ya WSDL yana taarifa zote mteja anahitaji ili kutumia huduma ya tovuti.

Utumiaji wa WSDL unaenea zaidi ya matumizi yake kama mkataba wa API. Kwa kuwa ufafanuzi rasmi, WSDL inaweza kutumika na programu kurahisisha utekelezaji wa huduma za wavuti kwa shughuli kama vile:

  • Inazalisha msimbo wa chanzo maombi ya mteja na seva ya huduma ya wavuti katika lugha tofauti za programu
  • Kuchapisha huduma ya wavuti
  • Majaribio ya huduma ya tovuti yenye nguvu

Wengi programu kwa kufanya kazi na huduma za wavuti ni pamoja na usaidizi wa WSDL 1.1. Hivi majuzi, idadi ya zana za ukuzaji wa huduma za wavuti zinazotumia WSDL 2.0 imekuwa ikiongezeka. Mradi Mtandao wa Apache huduma zinajumuisha miradi midogo miwili ambayo kwa sasa inasaidia WSDL 2.0. Woden ni kithibitishaji chenye msingi wa Java cha WSDL 2.0. Mradi wa huduma za Wavuti wa Apache pia hutoa mabadiliko ya XSL (XSLT) WSDL 2.0 yanayoitwa Printa ya WSDL 2.0 nzuri, kutoa usomaji bora wa kibinadamu Hati ya WSDL. Axis2 ni injini maarufu ya huduma za wavuti (pia kutoka Apache) ambayo hutoa msimbo wa Java ya mteja na seva kutoka kwa hati ya WSDL 2.0.

Maelezo ya huduma ya tovuti ya REST kwa kutumia WSDL 2.0

Unaunda duka la vitabu ambalo lina URL ya kina: http://www.bookstore.com. Tayari umeunda huduma mbili za Wavuti za REST:

  • orodha ya vitabu - huduma inapokea orodha ya vitabu vinavyouzwa na wewe.
  • maelezo ya kitabu - huduma inapokea habari kuhusu kitabu maalum.

Jibu linarejeshwa katika hati za XML.

Kipengele kiolesura inafafanua orodha ya utendakazi wa huduma za wavuti, ikijumuisha maelezo ya ingizo, pato, na ujumbe wa makosa kwa shughuli, pamoja na mpangilio wa utumaji.

Kipengele kufunga huamua njia za mawasiliano kati ya mteja na huduma ya wavuti. Kwa upande wa huduma za wavuti za REST, HTTP imebainishwa kama njia ya mawasiliano.

Kipengele cha huduma huhusisha anwani za huduma za tovuti na violesura maalum na vifungo. (Hiyo ni, inaweka mawasiliano kati ya URL ya operesheni ya huduma ya wavuti na kipengele kufunga).

Unganisha orodha ya vitabu kwenye HTTP

Kipengele kufunga inabainisha ufungaji wa huduma ya wavuti kwa itifaki maalum ya kuhamisha data. Kufunga kitabu orodha ya huduma kwa HTTP unahitaji kutaja thamani http://www.w3.org/ns/wsdl/http kwa sifa aina kipengele kufunga.

Kipengele kufunga inaweza kurejelea kwa hiari kiolesura. Acha sifa kiolesura tupu. Utaiunda katika sehemu inayofuata. Kama kiolesura kuhusishwa na kufunga, Kisha kufunga kipengele kinaweza kufafanua kwa hiari kipengele cha mtoto operesheni, ambayo ni kioo kwa uendeshaji wa interface kipengele. Unahitaji kuunda kipengee cha kipengee operesheni na ujaze kiungo kwa operesheni baadaye baada ya uumbaji kiolesura.

Kuna njia 4 za mawasiliano za HTTP

  • FUTA

Huduma ya orodha ya Vitabu husoma ombi na hufanya kazi ipasavyo kwa kutumia HTTP GET. Sakinisha GET mbinu kwa kipengele cha operatioin kwa kutumia sifa ya mbinu kutoka kwa nafasi ya majina ya WSDL 2.0 HTTP. Ili kutumia sifa hii, unahitaji kwanza kufafanua nafasi ya jina http://www.w3.org/ns/wsdl/http kwenye kipengele maelezo.

Huduma ya kufunga orodha ya vitabu imefafanuliwa katika tangazo lifuatalo. Bainisha sasa kufunga katika kipengele mwisho: tns:BookListHTTPBinding.

Huduma ya orodha ya vitabu vya duka la vitabu.

Ufafanuzi wa uendeshaji wa huduma ya orodha ya vitabu

Kufikia sasa umejifunza jinsi ya kushughulikia na kuwasiliana na huduma ya Wavuti ya orodha ya vitabu. Ifuatayo, unataja utendakazi wa huduma ya orodha ya vitabu, ambayo inaelezea huduma ya orodha ya vitabu hufanya nini.

Kwa hiyo, umejifunza jinsi ya kuweka anwani na kuweka binding (njia ya mawasiliano) kwa huduma ya mtandao. Ifuatayo, unahitaji kuweka operesheni ya huduma, ambayo huamua ni huduma gani ya wavuti ya orodha ya kitabu inafanya.

Kipengele cha interface na kipengele cha uendeshaji wa mtoto hutumiwa kufafanua shughuli za huduma. Kwa upande wa orodha ya vitabu, unafafanua operesheni moja, getBookList, ambayo inarudisha orodha ya vitabu.

Ifuatayo, fafanua sifa tatu za kipengele cha operesheni:

Muundo

Inatumika kubainisha muundo wa ujumbe muundo wa kubadilishana ujumbe(MEP) kwa operesheni. MEP inafafanua mlolongo wa ujumbe kwa ajili ya operesheni na mwelekeo wao. Katika hali hii, lazima ubainishe thamani http://www.w3.org/ns/wsdl/in-out ili kuonyesha kwamba huduma ya tovuti inapokea ujumbe mmoja wa ingizo unaouliza orodha ya vitabu, na kutuma ujumbe mmoja wa pato ukiuliza. orodha ya vitabu. Ili kusaidia MEP huyu, bainisha watoto pembejeo Na pato kwa kipengele operesheni. Vipengele hivi hutumia vipengee vilivyoelezewa katika schema ya XML kufafanua miundo ya ujumbe. Maelezo katika sehemu inayofuata.

Mtindo

Inatumika kuonyesha maelezo ya ziada kuhusu kazi. Bainisha thamani http://www.w3.org/ns/wsdl/style/iri , ambayo inaweka vikwazo kwa maudhui ya vipengele vya ingizo, kama vile kuhitaji kutumia vipengele vya taratibu vya XML pekee.

wsdlx:salama

wsdlx:safe: Kutoka kwa nafasi ya jina ya viendelezi vya WSDL, sifa hii inatangaza kuwa operesheni hii haina nguvu. Aina hii ya operesheni haibadilishi rasilimali na kwa hivyo inaweza kuitwa mara nyingi na matokeo sawa. Ili kutumia kipengele hiki, tangaza nafasi ya jina ya viendelezi vya WSDL http://www.w3.org/ns/wsdl-extensions kwenye kipengele cha maelezo.

Sifa hii ni kutoka kwa nafasi ya majina ya viendelezi vya WSDL. Inaamua kuwa operesheni ni asiye na uwezo. Operesheni hii haibadilishi rasilimali, kwa hivyo inaweza kuitwa mara nyingi na matokeo sawa. Ili kutumia kipengele hiki, lazima utangaze viendelezi vya nafasi ya majina vya WSDL http://www.w3.org/ns/wsdl-extensions katika kipengele cha mzizi (kipengele cha maelezo).

Unaweza kupata Miundo, mitindo na wsdlx:fasili salama zilizobainishwa awali katika WSDL 2.0 Sehemu ya 2: Viambatanisho.

Ifuatayo ni ufafanuzi wa huduma ya orodha ya vitabu na maelezo ya ziada kiolesura. Baada ya kuongeza kiolesura, sasa unaweza kubadilisha kipengele cha operesheni ya kumfunga ili kutaja viungo kwa ilivyoelezwa kiolesura Na operesheni.

Ufungaji RESTful HTTP kwa huduma ya orodha ya vitabu. Huduma ya orodha ya vitabu vya duka la vitabu.

Kufafanua ujumbe wa huduma ya uendeshaji wa orodha ya vitabu

Huduma ya wavuti ya orodha ya vitabu hutumia jumbe mbili: ingizo na pato. Lazima ueleze miundo ya jumbe hizi ili programu za mteja zijue nini cha kutuma kwa huduma na nini cha kutarajia kurudi.

WSDL 2.0 inasaidia mifumo ya aina nyingi ya kuelezea maudhui ya ujumbe, lakini schema ya XML ndiyo pekee inayotumika. Sehemu hii haijumuishi maelezo ya mpangilio wa XML. Schema ya XML inatumika katika programu zingine nyingi, kama WSDL 1.1, na kuna nakala nyingi nzuri kuihusu. Sehemu hii inaangazia jinsi ya kutumia taratibu za XML kwa orodha ya vitabu huduma ya Wavuti ya REST na jinsi ya kutumia sifa za ziada zilizofafanuliwa na WSDL 2.0 ili kufafanua sifa ya taratibu.

WSDL 2.0 inasaidia mifumo mingi ya ufafanuzi wa aina, lakini kiutendaji ni schema ya XML pekee ndiyo inatumika. Nakala hii haiendi kwa undani kuhusu schema ya XML. Schema ya XML inatumika katika programu zingine nyingi, kama vile WSDL 1.1, na kuna nyingi makala nzuri kuhusu yeye. (). Sehemu hii inaonyesha matumizi ya taratibu za XML kuhusiana na mfano mahususi wa huduma ya orodha ya vitabu REST, pamoja na matumizi ya sifa za ziada zilizofafanuliwa katika WSDL 2.0 kwa ufafanuzi wa sifa ya schema.

Ili kuelezea jumbe 2 za orodha ya vitabu, unahitaji kueleza vipengele 2 vya kimataifa.

  • getBookList inawakilisha ujumbe wa ingizo. Ina mlolongo wa vipengele, ikiwa ni pamoja na kila kigezo cha ombi kinachoruhusiwa kwa huduma: mamlaka, cheo, mchapishaji, somo Na lugha. Vipengele pekee vinaweza kutumika ndani ya ujumbe wa getBookList kwa sababu mtindo wa IRI umechaguliwa kwa ajili ya uendeshaji wa kiolesura.
  • Orodha ya vitabu inawakilisha ujumbe wa pato. Ina mlolongo wa vipengele vya kitabu. Kila kipengele cha kitabu kina mada na sifa za url. Sifa ya kichwa inajieleza yenyewe. Sifa ya url ni kiungo cha huduma ya maelezo ya kitabu, inarudi maelezo ya kina kuhusu kitabu maalum.

Ufafanuzi wa sifa yako ya url hutumia kwa zamu sifa 2 kutoka kwa nafasi ya majina ya viendelezi vya WSDL. wsdlx:interface na wsdlx:sifa za kumfunga zinabainisha kiolesura na kufunga kwa huduma. Programu inaweza kutumia habari hii kupata huduma kiotomatiki. Ili kutumia sifa hizi, bainisha nafasi ya majina ya vipimo vya WSDL kwa kipengele schema. Pia jumuisha nafasi ya jina ya maelezo ya kitabu kutoka kwa maelezo yake ya WSDL 2.0.

Ratiba ya XML ya huduma ya orodha ya vitabu imetolewa hapa chini.

Kipengele cha ombi la huduma ya orodha ya vitabu. Kipengele cha majibu kwa huduma ya orodha ya vitabu.

Ili kurejelea vipengele vya ingizo na pato, lazima uingize schema kwenye hati yako ya WSDL. Ili kuleta taratibu, tumia kipengee cha kuleta taratibu katika sehemu ya aina kama inavyoonyeshwa kwenye uorodheshaji hapa chini. Zaidi ya hayo, unahitaji kuongeza marejeleo kwa getBookList na vipengee vya Orodha ya Vitabu katika kiolesura cha ingizo na vipengee vya kutoa, na kuongeza orodha ya kitabu nafasi za majina za utaratibu wa XML kwenye kipengele cha msingi cha WSDL.

WSDL tayari kwa huduma ya tovuti ya orodha ya vitabu.

Haya ni maelezo ya WSDL 2.0 ya sampuli ya orodha ya huduma ya duka la vitabu ili kupata maelezo ya kitabu. Operesheni hii inarejesha orodha ya vitabu. Ufungaji RESTful HTTP kwa huduma ya orodha ya vitabu. Huduma ya orodha ya vitabu vya duka la vitabu.

Ujumbe wa mtafsiri

Nilichukua uhuru wa kutotafsiri muhtasari na viungo. Tazama mwandishi kwa zote mbili. katika makala asili. Lazima niseme lugha asilia ni ngumu sana. Hata hivyo, natumaini makala hiyo itakuwa ya manufaa.

Kichwa cha mada kwa kweli ni swali, kwa sababu ... Mimi mwenyewe sijui ni nini na kwa mara ya kwanza nitajaribu kufanya kazi nayo ndani ya mfumo wa makala hii. Kitu pekee ninachoweza kuhakikisha ni kwamba nambari iliyowasilishwa hapa chini itafanya kazi, lakini misemo yangu itakuwa tu mawazo na nadhani kuhusu jinsi mimi mwenyewe ninaelewa haya yote. Kwa hivyo, twende...

Utangulizi

Tunahitaji kuanza na kwa nini dhana ya huduma za mtandao iliundwa. Kufikia wakati dhana hii ilionekana ulimwenguni, teknolojia tayari zilikuwepo ambazo ziliruhusu programu kuingiliana kwa mbali, ambapo programu moja inaweza kuita njia fulani katika programu nyingine, ambayo inaweza kuzinduliwa kwenye kompyuta iliyoko katika jiji lingine au hata nchi. Yote hii imefupishwa kama RPC (Upigaji simu wa Utaratibu wa Mbali). Mifano ni pamoja na teknolojia za CORBA, na kwa Java - RMI (Utumiaji wa Mbinu ya Mbali). Na kila kitu kinaonekana kuwa kizuri ndani yao, haswa katika CORBA, kwa sababu ... Unaweza kufanya kazi nayo katika lugha yoyote ya programu, lakini kitu kilikuwa kinakosekana. Ninaamini kuwa ubaya wa CORBA ni kwamba inafanya kazi kupitia baadhi yake itifaki za mtandao badala ya HTTP rahisi, ambayo itafaa kupitia firewall yoyote. Wazo la huduma ya wavuti lilikuwa kuunda RPC ambayo ingeingizwa kwenye pakiti za HTTP. Hivyo ilianza maendeleo ya kiwango. Ni dhana gani za kimsingi za kiwango hiki:
  1. SABUNI. Kabla ya kupiga utaratibu wa mbali, unahitaji kuelezea simu hii katika faili ya XML katika umbizo la SOAP. SABUNI ni moja tu kati ya nyingi Alama ya XML, ambayo hutumiwa katika huduma za wavuti. Kila kitu tunachotaka kutuma mahali fulani kupitia HTTP kwanza hubadilishwa kuwa maelezo ya XML SOAP, kisha kuingizwa kwenye pakiti ya HTTP na kutumwa kwa kompyuta nyingine kwenye mtandao kupitia TCP/IP.
  2. WSDL. Kuna huduma ya wavuti, i.e. programu ambayo njia zake zinaweza kuitwa kwa mbali. Lakini kiwango kinahitaji kwamba programu hii iambatane na maelezo yanayosema kwamba "ndio, uko sawa - hii ni huduma ya wavuti kwa kweli na unaweza kuita njia kama hizi kutoka kwayo." Maelezo haya yanawakilishwa na faili nyingine ya XML, ambayo ina umbizo tofauti, yaani WSDL. Wale. WSDL ni faili ya XML tu inayoelezea huduma ya wavuti na hakuna zaidi.
Mbona unauliza kwa ufupi? Je, huwezi kuwa mahususi zaidi? Labda inawezekana, lakini ili kufanya hivi itabidi ugeuke kwenye vitabu kama vile T. Mashnin, "Huduma za Wavuti za Java." Huko, zaidi ya kurasa 200 za kwanza, kuna maelezo ya kina ya kila lebo ya viwango vya SOAP na WSDL. Je, inafaa kufanya? Kwa maoni yangu, hapana, kwa sababu ... hii yote imeundwa moja kwa moja katika Java, na unahitaji tu kuandika yaliyomo ya njia ambazo zinapaswa kuitwa kwa mbali. Kwa hivyo, API kama vile JAX-RPC ilionekana kwenye Java. Ikiwa mtu yeyote hajui, wanaposema kuwa Java ina API kama hiyo na kama hiyo, inamaanisha kuwa kuna kifurushi kilicho na seti ya madarasa ambayo yanajumuisha teknolojia inayohusika. JAX-RPC ilibadilika kwa muda kutoka toleo hadi toleo na hatimaye ikawa JAX-WS. WS ni wazi inasimamia WebService na unaweza kufikiria kuwa hii ni jina jipya la RPC kama buzzword maarufu siku hizi. Hii si kweli, kwa sababu Sasa huduma za mtandao zimeondoka kwenye wazo la awali na kuruhusu sio tu kupiga simu njia za mbali, lakini pia kutuma tu ujumbe wa hati katika muundo wa SOAP. Sijui kwa nini hii inahitajika bado; hakuna uwezekano kwamba jibu hapa litakuwa "ikiwa tu inahitajika." Mimi mwenyewe ningependa kujifunza kutoka kwa wandugu wenye uzoefu zaidi. Na mwishowe, basi JAX-RS ilionekana kwa kinachojulikana huduma za wavuti za RESTful, lakini hii ndio mada ya nakala tofauti. Utangulizi unaweza kuishia hapa, kwa sababu ... Ifuatayo tutajifunza kufanya kazi na JAX-WS.

Mbinu ya jumla

Katika huduma za wavuti daima kuna mteja na seva. Seva ni huduma yetu ya wavuti na wakati mwingine huitwa sehemu ya mwisho (kama ilivyo, mahali pa mwisho ambapo ujumbe wa SOAP kutoka kwa mteja hufikia). Tunahitaji kufanya yafuatayo:
  1. Eleza kiolesura cha huduma yetu ya wavuti
  2. Tekeleza kiolesura hiki
  3. Zindua huduma yetu ya wavuti
  4. Andika mteja na upige simu kwa mbali mbinu inayotakiwa huduma ya wavuti
Huduma ya wavuti inaweza kuzinduliwa njia tofauti: ama elezea darasa kwa njia kuu na uendeshe huduma ya wavuti moja kwa moja kama seva, au ipeleke kwa seva kama Tomcat au nyingine yoyote. Katika kesi ya pili, hatujizindua wenyewe seva mpya na hatufungui mlango mwingine kwenye kompyuta, lakini tuambie tu chombo cha Tomcat servlet kwamba "tumeandika madarasa ya huduma ya wavuti hapa, tafadhali yachapishe ili kila mtu anayewasiliana nawe atumie huduma yetu ya wavuti." Bila kujali njia ya kuzindua huduma ya wavuti, tutakuwa na mteja sawa.

Seva

Hebu tuzindue IDEA na tuunde mradi mpya Unda Mradi Mpya. Wacha tuonyeshe jina HelloWebService na bonyeza kitufe Inayofuata, kisha kitufe Maliza. Katika folda src tutengeneze kifurushi ru.javarush.ws. Katika mfuko huu tutaunda interface ya HelloWebService: mfuko ru. javarush. ws; // haya ni maelezo, i.e. njia ya kuashiria madarasa na mbinu zetu, // inayohusiana na teknolojia ya huduma ya wavuti ingiza javax. jws. Mbinu ya Wavuti; ingiza javax. jws. Huduma ya Wavuti; ingiza javax. jws. sabuni. Kufunga SABUNI; // tunasema kwamba kiolesura chetu kitafanya kazi kama huduma ya wavuti@WebService // tunasema kwamba huduma ya wavuti itatumika kuita mbinu@SOAPBinding (mtindo = SOAPBinding. Style. RPC) kiolesura cha umma HelloWebService ( // tunasema kwamba njia hii inaweza kuitwa kwa mbali@WebMethod public String getHelloString(jina la kamba) ; ) Katika msimbo huu, madarasa ya WebService na WebMethod yanaitwa maelezo na hayafanyi chochote isipokuwa kuweka alama kwenye kiolesura chetu na mbinu yake kama huduma ya wavuti. Vile vile hutumika kwa darasa la SOAPBinding. Tofauti pekee ni kwamba SOAPBinding ni maelezo yenye vigezo. KATIKA kwa kesi hii kigezo cha mtindo kinatumiwa na thamani inayoonyesha kuwa huduma ya wavuti itafanya kazi si kupitia ujumbe wa hati, lakini kama RPC ya kawaida, i.e. kuita mbinu. Wacha tutekeleze mantiki yetu ya kiolesura na tuunde darasa la HelloWebServiceImpl kwenye kifurushi chetu. Kwa njia, ninaona kuwa kumalizia darasa na Impl ni kusanyiko katika Java, kulingana na ambayo utekelezaji wa miingiliano imeteuliwa sana (Impl - kutoka kwa utekelezaji wa neno, i.e. utekelezaji). Hili sio hitaji na uko huru kutaja darasa chochote unachotaka, lakini tabia njema zinahitaji: package ru. javarush. ws; // ufafanuzi sawa na wakati wa kuelezea kiolesura, ingiza javax. jws. Huduma ya Wavuti; // lakini hapa inatumika na parameta ya endpointInterface, // kuonyesha jina kamili interface darasa la huduma zetu za wavuti@WebService(endpointInterface= "ru.javarush.ws.HelloWebService") darasa la umma la HelloWebServiceImpl hutumia Huduma ya HelloWeb ( @Override public String getHelloString (jina la kamba) ( // tu kurudisha salamu rudisha "Habari, " + jina + "!" ; ) ) Wacha tuzindue huduma yetu ya wavuti kama seva inayojitegemea, i.e. bila ushiriki wa seva yoyote ya Tomcat na programu (hii ni mada ya majadiliano tofauti). Ili kufanya hivyo, katika muundo wa mradi kwenye folda src Hebu tuunda mfuko ru.javarush.endpoint, na ndani yake tutaunda darasa la HelloWebServicePublisher kwa njia kuu: mfuko ru. javarush. mwisho; // darasa la kuendesha seva ya wavuti na huduma za wavuti ingiza javax. xml. ws. Mwisho; // darasa la huduma zetu za wavuti kuagiza ru. javarush. ws. HelloWebServiceImpl; darasa la umma HelloWebServicePublisher ( utupu wa utupu wa umma (String... args) ( // anzisha seva ya wavuti kwenye bandari 1986 // na kwa anwani iliyoainishwa katika hoja ya kwanza, // anza huduma ya wavuti iliyopitishwa katika hoja ya pili Mwisho. kuchapisha( "http://localhost:1986/wss/hello", HelloWebServiceImpl mpya ()); ) ) Sasa hebu tuendeshe darasa hili kwa kubofya Shift+F10. Hakuna kitakachoonekana kwenye koni, lakini seva inafanya kazi. Unaweza kuthibitisha hili kwa kuandika laini http://localhost:1986/wss/hello?wsdl kwenye kivinjari chako. Ukurasa unaofungua, kwa upande mmoja, unathibitisha kwamba tuna seva ya wavuti (http://) inayoendesha bandari 1986 kwenye kompyuta yetu (localhost), na, kwa upande mwingine, inaonyesha maelezo ya WSDL ya huduma yetu ya tovuti. Ukisimamisha programu, maelezo hayatapatikana, kama vile huduma ya wavuti yenyewe, kwa hivyo hatutafanya hivi, lakini endelea kumwandikia mteja.

Mteja

Katika folda ya mradi src Hebu tuunda mfuko ru.javarush.client , na ndani yake darasa la HelloWebServiceClient na njia kuu: mfuko ru. javarush. mteja; // inahitajika kupata maelezo ya wsdl na kupitia hiyo // fikia huduma ya wavuti yenyewe kuingiza java. wavu. URL; // ubaguzi huu utatokea wakati wa kufanya kazi na kitu cha URL kuingiza java. wavu. IliyoharibikaURLException; // madarasa ya kuchanganua xml na maelezo ya wsdl // na ufikie lebo ya huduma ndani yake ingiza javax. xml. nafasi ya majina. QName; ingiza javax. xml. ws. Huduma; // interface ya huduma yetu ya wavuti (tunahitaji zaidi) kuagiza ru. javarush. ws. HelloWebService; darasa la umma HelloWebServiceClient ( njia kuu ya utupu ya umma (String args) inarusha MalformedURLException ( // tengeneza kiunga cha maelezo ya wsdl URL url= URL mpya ( "http://localhost:1986/wss/hello?wsdl") ; // Tunaangalia vigezo vya mjenzi anayefuata kwenye tepe ya kwanza kabisa ya maelezo ya WSDL - ufafanuzi. // angalia hoja ya 1 katika sifa ya targetNamespace // angalia hoja ya 2 katika sifa ya jina QName qname = new QName ("http://ws.site/" , "HelloWebServiceImplService" ) ; // Sasa tunaweza kufikia lebo ya huduma katika maelezo ya wsdl, Huduma = Huduma. tengeneza (url, qname); // na kisha hadi lebo ya bandari iliyowekwa ndani yake, ili // pata kiunga cha huduma ya wavuti iliyo mbali nasi HelloWebService hujambo = huduma. getPort(HelloWebService.class); // Hoo! Sasa unaweza kupiga simu kwa njia ya mbali Mfumo. nje. println (hello. getHelloString ( "JavaRush" )); ) ) Nilitoa maoni ya juu zaidi juu ya nambari kwenye tangazo. Sina chochote cha kuongeza, kwa hivyo wacha tuendeshe (Shift + F10). Tunapaswa kuona maandishi kwenye koni: Hujambo, JavaRush! Ikiwa haukuona, basi labda umesahau kuanza huduma ya wavuti.

Hitimisho

Katika mada hii iliwasilishwa safari fupi kwa huduma za wavuti. Kwa mara nyingine tena, nitasema kwamba mengi ya niliyoandika ni nadhani yangu kuhusu jinsi inavyofanya kazi, na kwa hivyo hupaswi kuniamini sana. Ningeshukuru kama watu wenye ujuzi Watanirekebisha, kwa sababu basi nitajifunza kitu. UPD.

WSDL (Lugha ya Maelezo ya Huduma za Wavuti) toleo la 1.1 lilichapishwa mnamo Machi 15, 2001. WSDL ni umbizo la msingi la XML linalotumika kuelezea huduma za wavuti kwa kutumia jumbe zilizo na taarifa kuhusu jinsi ya kufikia huduma mahususi ya wavuti. WSDL inayoweza kupanuliwa, ambayo hukuruhusu kuelezea huduma na jumbe zao bila kujali ni aina gani za fomati za ujumbe au itifaki za mtandao zinazotumika kwa usafiri, hata hivyo, WSDL 1.1 hutumiwa mara nyingi pamoja na SOAP 1.1, HTTP GET/POST na MIME. Kwa sababu ya WSDL ilitengenezwa kwa pamoja na SOAP, na makampuni sawa Microsoft, Ariba na IBM walishiriki katika maendeleo yake. Ikiwa tutazingatia hati WSDL intuitively, tunaweza kusema kwamba inaruhusu jibu maswali 4:

1) unafanya nini? Jibu la swali hili limetolewa kwa fomu inayofaa kwa mtazamo wa kibinadamu na fomu inayoonekana kwa mashine. Jibu la mtu aliye kwenye lebo:<jina/>, <nyaraka/>, kwa gari -<ujumbe/>, <pointType>

2) unazungumza lugha gani? (unatumia aina gani?) Jibu kwenye lebo:<aina/>

3) nitawasilianaje na wewe? (mteja atafikiaje huduma ya wavuti?): HTTP au SMTP. Jibu liko ndani<kufunga/>

4) ninaweza kukupata wapi? (naweza kupata wapi huduma hii ya wavuti au URL yake ni ipi?). Jibu ni:<huduma/>

Muundo:

Kila hati ya WSDL inaweza kugawanywa katika sehemu tatu za kimantiki:

1. kufafanua aina za data - kuamua aina ya ujumbe uliotumwa na kupokelewa na huduma ya XML

2. shughuli za kufikirika - orodha ya shughuli ambazo zinaweza kufanywa na ujumbe

3. kuunganisha huduma - njia ambayo ujumbe utawasilishwa

Nyaraka WSDL inaweza kuundwa kwa mikono, lakini lugha imerasimishwa kabisa WSDL hukuruhusu kuorodhesha mchakato wa uandishi WSDL-nyaraka. Vyombo vingi vya uidhinishaji wa huduma za Wavuti vina huduma ambazo huunda kiotomatiki WSDL-faili zinazoelezea huduma za Wavuti zilizotengenezwa tayari. Kwa mfano, Zana ya Uandishi wa Huduma za Wavuti Axis ya Apache ina darasa Java2WSDL, kuunda WSDL- faili ya darasa la Java au kiolesura kinachoelezea huduma ya Wavuti. Kifurushi cha IBM WSTK, ambacho kinajumuisha Mhimili, ina matumizi java2wsdl, ambayo huunda na kuendesha kitu kutoka kwa darasa hili. Inafanya kazi kutoka kwa safu ya amri.

Vipengele vya Hati ya WSDL

Wacha tueleze vitambulisho vinavyotumika sana vya WSDL:

Lebo ni lebo ya mizizi ya hati zote za WSDL. Inafafanua nafasi kadhaa za majina:

1)Nafasi inayolengwa ya Jina ni nafasi ya jina ya huduma yetu ya wavuti

2) xmlns - nafasi ya kawaida ya hati ya WSDL

3)xmlns: SOAP_ENC - nafasi ya jina inayotumika kuelezea usimbaji wa SOAP


4) xmlns: impl na intf - nafasi ya majina ya utekelezaji na ufafanuzi wa huduma zetu za wavuti

· Hati ya Ufafanuzi wa Huduma ya Wavuti

· Hati ya kutekeleza huduma ya wavuti

Kwa unyenyekevu, kama sheria, hutumia faili 1 ambayo ina habari yote

Kipengele - hutoa habari kuhusu data ambayo huhamishwa kutoka mwisho mmoja hadi mwingine.

Ili kuelezea simu ya RPC, lazima uunde ujumbe wa ingizo na ujumbe wa kutoa.

Ndani ya kipengele hiki, unaweza kutaja vigezo vya njia kwa kutumia kipengele

Kipengele inafafanua na kufafanua uendeshaji au mbinu zinazotumika na huduma ya tovuti

Uendeshaji unaweza kuwa na ujumbe wa ingizo pamoja na ujumbe wa hitilafu.

Kipengele - inaeleza jinsi shughuli zilizobainishwa katika aina ya mlango zitakavyotumwa kwenye mtandao. Kwa sababu kipengele hutumia aina ya bandari, lazima ibainishe aina iliyofafanuliwa mahali fulani mapema kwenye hati.

Kipengele - inaonyesha mahali pa kupata huduma ya wavuti

Kipengele kuagiza . Mara nyingi kipengele cha huduma kinagawiwa hati yake ya wsdl kwa sababu za vitendo.

Ili kuruhusu kuchanganya hati kadhaa za wsdl kuwa moja, kipengele cha kuingiza kinatumika. Inakuruhusu kujumuisha hati moja ya wsdl hadi nyingine.

Kipengele aina hukuruhusu kutaja aina za data zinazopitishwa ikiwa sio za kawaida.

WSDL inasaidia njia 4 za utendakazi:

· shughuli za njia moja au za njia moja. Ujumbe unatumwa kwa kituo cha huduma. Katika kesi hii, operesheni inaelezewa na ujumbe mmoja tu wa pembejeo.

· Ombi-Jibu - hali ya ombi-jibu. Njia hii ya operesheni ndiyo inayojulikana zaidi. Katika hali hii, maelezo ya uendeshaji yana ujumbe wa ingizo na towe na ujumbe wa hitilafu wa hiari.

· Uendeshaji wa aina ya ombi-jibu. Katika hali hii, sehemu ya mwisho ni mteja wa sehemu nyingine ya mwisho. Umbizo la uendeshaji ni sawa na hali ya ombi-jibu, lakini data ya towe imeorodheshwa kabla ya data ya ingizo.

· Arifa ya uendeshaji. Hali hii ni toleo lingine la upitishaji wa njia moja wa awali, ambapo sehemu ya mwisho hutuma ujumbe badala ya kuupokea. Uendeshaji una ujumbe wa pato pekee.

Vipengele vya viendelezi vya kuunganisha hutumiwa kubainisha sarufi maalum kwa ujumbe wa hitilafu unaoingia (3) na unaotoka (4) (5). Maelezo ya kiwango cha (2) na kiwango cha kisheria (1) pia yanaweza kubainishwa.

Kipengele cha kumfunga operesheni kina data ya utendakazi wa jina moja aina inayohusiana bandari. Walakini, jina la operesheni kwa ujumla sio la kipekee (mfano: njia / kazi za upakiaji - kwa kutumia majina sawa na saini tofauti), kwa hivyo inaweza kuwa haitoshi kuamua kipekee utendakazi wa aina ya bandari. Katika hali kama hizi, utendakazi lengwa hushughulikiwa kwa kubainisha zaidi wsdl:input na wsdl:output majina ya vipengele kwa kutumia sifa ya jina.

Kufunga lazima sakinisha itifaki moja tu.

Kufunga haipaswi vyenye maelezo ya anwani.

Bandari

Mlango hufafanua mwisho mmoja kwa kuweka anwani ya kuunganisha.

  1. <wsdl:ufafanuzi .... >
  2. <wsdl:huduma .... > *
  3. <wsdl:bandari name = "nmtoken" binding = "qname" > *
  4. <-- extensibility element (1) -->
  5. wsdl:bandari>
  6. wsdl:huduma>
  7. wsdl:ufafanuzi>

Sifa ya jina hubainisha jina la kipekee kati ya milango yote iliyo ndani ya hati ya WSDL. Sifa ya kushurutisha ya aina ya QName ina marejeleo ya kufunga (tazama).

Vipengele vya kiendelezi (1) hutumiwa kutaja anwani.

Bandari haipaswi bainisha zaidi ya anwani moja.

Bandari haipaswi vyenye maelezo yoyote ya kisheria isipokuwa anwani.

Huduma

Huduma hukusanya pamoja seti ya bandari zinazohusiana.

  1. <wsdl:ufafanuzi .... >
  2. <wsdl:huduma jina = "nmtoken" > *
  3. <wsdl:bandari .... /> *
  4. wsdl:huduma>
  5. wsdl:ufafanuzi>

Sifa ya jina hubainisha jina la kipekee kati ya huduma zote zilizofafanuliwa ndani ya hati ya WSDL.

Bandari ndani ya huduma imeunganishwa kama ifuatavyo:

  • Bandari haziwasiliani na kila mmoja (yaani, pato la bandari moja sio pembejeo la mwingine).
  • Ikiwa huduma ina milango mingi inayoshiriki aina ya mlango wa kawaida lakini inatumia vifungo tofauti au kuwa na anwani tofauti, bandari hizo ni bandari mbadala. Kila bandari kama hiyo hutekeleza tabia sawa kimantiki (ndani ya vizuizi vya umbizo la usafiri na ujumbe vilivyowekwa na ufungaji sambamba). Hii inaruhusu mteja kuchagua bandari maalum kwa mawasiliano kulingana na vigezo mbalimbali(msaada wa itifaki ya usafiri, nk).
  • Kwa kuangalia bandari, unaweza kuamua ni aina gani za bandari zinazoungwa mkono na huduma. Kulingana na data hii, mteja anaweza kuamua uwezo wa kuingiliana na huduma maalum. Hii ni muhimu ikiwa uhusiano unamaanisha kati ya shughuli kutoka aina tofauti bandari, na kufanya kazi fulani kunahitaji usaidizi kutoka kwa huduma kwa wote aina zinazohitajika bandari.
  1. Hii ni tafsiri isiyolipishwa na iliyopanuliwa ya hati Lugha ya Maelezo ya Huduma za Wavuti (WSDL) 1.1 ya tarehe 15 Machi 2001.
  2. Ni ngumu sana kufanya kazi na maneno yasiyoweza kuepukika yaliyoandikwa kwa Kilatini, na pia yametafsiriwa bila utata. Kwa hiyo, jina la awali linapewa tu wakati neno jipya linapoanzishwa, na zaidi katika maandishi tafsiri ya Kirusi hutumiwa.

Katika Sura ya 2, tulijadili kwamba baada ya kuunda huduma ya Wavuti kwenye seva kama servlet, ukurasa wa JSP, faili ya JWS, EJB, au kitu kingine, unapaswa kuelezea muundo na uwezo wa huduma ya Wavuti katika lugha inayojitegemea. mfumo wa uendeshaji, mfumo wa programu unaotumiwa kuunda huduma ya Wavuti. Maelezo haya yamesajiliwa katika eneo linalofikiwa na umma kwenye Mtandao, kama vile UDDI au sajili ya ebXML, au kuhifadhiwa kwenye seva ya huduma ya Wavuti. Maelezo lazima yawe na taarifa kamili na sahihi kuhusu huduma zote zinazotolewa na Huduma ya Wavuti, mbinu za kupata huduma, yaliyomo katika ombi la huduma, na muundo wa taarifa iliyotolewa.

Mojawapo ya njia za kuelezea kwa usahihi na kwa usawa huduma za Wavuti ni lugha ya WSDL, iliyoundwa na muungano wa W3C. Lugha hii ni utekelezaji mwingine wa XML. Vipimo vyake vilivyopendekezwa hivi karibuni huchapishwa kila wakati kwenye ukurasa http://www.w3.org/TR/wsdI. Wakati wa kuandika kitabu, toleo la WSDL lilikuwa 1.2, ambalo tutalielezea katika sura hii.

Muundo wa Hati ya WSDL

Kipengele cha msingi cha hati ya XML - maelezo ya WSDL - ni kipengele . Katika kipengele hiki, unaweza kutumia sifa ya hiari ya jina ili kuyapa maelezo jina. Pia ni mahali pazuri pa kutambulisha nafasi za majina zinazotumika katika maelezo.

Ufafanuzi wa WSDL hutumia sana nafasi mbalimbali za majina. Mbali na majina sahihi, WSDL mara nyingi hutumia majina ya aina na vipengele vya Lugha ya Maelezo ya Schema ya XSD (tazama Sura ya 1) na majina ya lugha. itifaki ya SABUNI. Nafasi ya majina ya WSDL mara nyingi hufafanuliwa kama nafasi ya majina chaguomsingi. Kitambulishi cha nafasi ya majina cha toleo jipya zaidi la WSDL 1.2 wakati wa kuandika kilikuwa sawa na http://www.w3.org/2002/07/wsdl. Nafasi ya majina inayolengwa ambayo kitambulisho chake kimebainishwa na sifa kwa kawaida hutanguliwa na tns (nafasi ya jina inayolengwa).

Kwa kipengele cha mizizi vipengele vya aina sita za msingi na mbili za ziada zimeingizwa. Vipengele vyote ni vya hiari, kunaweza kuwa na idadi yoyote yao, isipokuwa kipengele , ambayo inaweza kuonekana mara moja tu kwenye hati. Kila kipengele kina jina, kinachoamuliwa na sifa ya jina inayohitajika. Vipengele vinarejeleana kwa kutumia majina haya. Hapa kuna vipengele vilivyowekwa kwenye kipengele cha mizizi

? Inafafanua aina changamano zinazotumiwa na huduma ya Wavuti kwa kutumia XSD au lugha ya ufafanuzi wa aina nyingine. Kipengele hiki hakihitajiki ikiwa huduma ya Wavuti hutumia tu aina rahisi, iliyofafanuliwa katika lugha ya XSD.

? - inaelezea kila ujumbe wa SOAP: ombi, majibu, uhamisho wa hati. Kipengele hiki kina vipengele Kuelezea sehemu za ujumbe ambazo hazigawanyiki kwa mtazamo wa WSDL. Kwa ujumbe wa aina ya kiutaratibu, kila kipengele Inaweza kueleza jina na aina ya hoja moja ya ombi au aina ya thamani ya kurejesha. Kwa ujumbe wa aina ya hati, vipengele Inaweza kuelezea kila sehemu ya ujumbe "multipart/related". Ufafanuzi huu wa mukhtasari basi hutiwa mwili na vipengele .

? Inafafanua kiolesura cha huduma ya Wavuti, kinachoitwa kituo cha mwisho au mlango wa kuwasili wa ujumbe katika WSDL. Inafafanuliwa kama seti ya huduma za Wavuti, inayoitwa shughuli katika WSDL. Ukitafsiri maelezo haya katika lugha ya programu, unaweza kuona kwamba bandari huweka ramani vizuri kwenye kiolesura cha Java, na kila operesheni huweka ramani vizuri kwa mbinu katika kiolesura hiki. Uendeshaji unaelezewa na vipengele vilivyowekwa , inayoelezea kila huduma ya mtu binafsi. Huduma inaelezewa na vitendo ambavyo vimegawanywa katika aina nne. Hayo ni mawili hatua rahisi: "kupokea ujumbe", "kutuma jibu", na vitendo viwili vilivyounganishwa: "kutuma ujumbe - kupokea jibu" au, kinyume chake, "kupokea ujumbe - kutuma jibu". Kupokea na kutuma, kwa upande wake, kunaelezewa na vipengele vya kiota Na , na ujumbe wa makosa ndio kipengele . Ujumbe uliopokelewa na kutumwa lazima uwe tayari uelezewe na vipengele , vipengele , NA warejelee KWA sifa ya ujumbe wao.

? - huorodhesha vitu vilivyowekwa Seti ya bandari zinazohusishwa na huduma moja ya Wavuti. Bandari sawa inaweza kuhusishwa na huduma nyingi.

? - inaeleza muundo maalum wa kutuma ujumbe: itifaki kama vile SOAP au HTTP, mbinu za kufunga ujumbe, aina ya maudhui yake: HTML, XML au aina nyingine ya ujumbe wa MIME. Kila kipengele kinaweza kuhusishwa na vipengele kadhaa vile, moja kwa kila njia ya usambazaji. Kipengele hiki kina vipengele vilivyofafanuliwa katika schema ya itifaki iliyochaguliwa.

? < service >- hubainisha eneo la huduma ya Wavuti kama bandari moja au zaidi. Kila bandari inaelezewa na kipengee kilichowekwa Inayo anwani ya kiolesura cha huduma ya Wavuti, iliyoainishwa kulingana na sheria zilizochaguliwa kwenye kipengee njia ya usafirishaji.

Mbali na mambo haya makuu sita, kuna vipengele viwili zaidi vya usaidizi.

? - inajumuisha faili ya schema ya WSDL XSD au faili nyingine ya WSDL.

Maoni. Inaweza kujumuishwa katika kipengele chochote

Maelezo ya WSDL.

Tunaweza kusema kwamba vipengele , Na Zinaonyesha NINI huduma ya Wavuti iliyoelezewa ina, ni huduma gani inatoa, jinsi huduma zinavyopangwa, na ni aina gani za data ambazo huduma hizi zina.

Vipengele eleza JINSI huduma ya Wavuti inatekelezwa, itifaki ya upitishaji ujumbe ni nini: HTTP, SMTP au nyinginezo, na pia inabainisha. vipimo usambazaji wa data.

Hatimaye, vipengele onyesha WAPI huduma ya Wavuti iko kwa kuunganisha maelezo na anwani maalum za huduma ya Wavuti.

Muundo wa hati ya WSDL umeonyeshwa katika Orodha 4.1. Herufi ndani ya mabano ya mraba hazimo kwenye hati. Zinaonyesha marudio ya kipengele au sifa katika maelezo ya huduma ya Wavuti:

Herufi [?] inamaanisha kuwa kipengele au sifa inaweza kuonekana sifuri au mara moja kwenye hati;

Alama [*] inamaanisha kuwa kipengele kinaweza kuonekana mara sifuri au zaidi;

Alama [+] ina maana kwamba kipengele kinaweza kuonekana mara moja au zaidi;

Kutokuwepo kwa mhusika katika mabano ya mraba inamaanisha kuwa sifa lazima ionekane mara moja haswa.

j Kuorodhesha 4.1. Schema ya Hati ya WSDL

targetNamespace="nfleH l ra«iij

location="URI-aflpec" /> [*]

Maoni ya bure

Maelezo ya aina ngumu na zisizo za kawaida.

[*]

[*]

[? ]

Maelezo ya mukhtasari wa ujumbe wa SABUNI kama seti ya sehemu zake kuu.

[*]

Maelezo ya muhtasari wa huduma ya Wavuti kama seti ya shughuli (huduma).

[*]

Maelezo ya huduma kama kupokea (ingizo) na kutuma (pato, kosa) ujumbe.

[?]

Umepokea ujumbe.

[?] [?]

Imetumwa

message="nMH kipengele sambamba "> [*] [?]

Ujumbe wa hitilafu utatumwa.

[*]

[+]

type="MMH ya kipengele sambamba "> [*]

[?]

Maelezo mahususi ya itifaki. Wao hufafanuliwa katika schema

itifaki hii. ->

[*]

[?]

Vipengele vinavyoelezea maelezo yameandikwa hapa

operesheni maalum. ->

[?]

Vipengele vinavyoelezea

maelezo ya ujumbe maalum uliopokelewa. ->

[?]

[?]

Vipengele vinavyoelezea

maelezo ya ujumbe maalum unaotumwa. ->

[*]

[?]

Vipengele vinavyoelezea

maelezo ya ujumbe maalum wa makosa. ->

serviceType="MMH ya kipengele sambamba "> [*]

Maelezo ya kiolesura cha huduma ya Wavuti kama seti ya bandari.

binding="nMH ya kipengele sambamba "> [*]

[?]

Anwani ya lazima na pekee ya interface ya huduma ya Mtandao imeandikwa hapa, iliyoandikwa kulingana na sheria

itifaki iliyoainishwa katika kipengele . ->

Kila itifaki maalum ya kuhamisha ujumbe - SOAP, HTTP, FTP, SMTP - inaongeza vipengele vyake vya ziada kwa vipengele sita kuu na viwili vya msaidizi vya lugha ya WSDL, inayoelezea vipengele vya itifaki hii.

Hebu tutoe mfano rahisi. Katika Orodha ya 3.14, tuliandika huduma rahisi ya Wavuti kama darasa la Java ambayo inarudisha ombi lililotumwa bila usindikaji wowote:

EchoService ya darasa la umma (

public String getEcho(String req) ( return req;

Orodha ya 4.2 inaelezea huduma hii ya Wavuti katika WSDL kwa kutumia itifaki ya SOAP.

Kuorodhesha 4.2. Maelezo ya Huduma ya Wavuti ya EchoService

toleo="1.0" usimbaji="UTF-8" ?>

targetNamespace="http://echoservice.com/echoservice.wsdl" xmlns="http://www.w3.org/2002/07/wsdl" xmlns:tns="http://echoservice.com/echoservice.wsdl " xmlns:soap="http://www.w3.org/2002/07/wsdl/soapl2" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

transport="http://schemas.xmlsoap.org/soap/http" />

"http://schemas.xmlsoap.org/soap/encoding/"

namespace= "http://echoservice.ccm/echcservice.wsdl" use=encoded" />

^oapKbocy encdingStyle=

"http: //schemas .xmlsoap. org/soap/encoding/" namespace= "http: //echoservice. c^/ech^service .wsdl" use="encoding" />

name="EchoServService">

Binding="tns:EchoServiceSoapBinding" name="EchoService"> eneo=

"http://localhost:8080/axis/EchoService.jws" />

Katika Orodha 4.2 tuko kwenye kipengele tulifafanua viambishi awali vya nafasi zote za majina tunazohitaji. Kisha, tulielezea ombi na jibu katika vipengele viwili . Tuliwapa majina "getEchoRequest" NA "getEchoResponse". Ombi lina hoja moja ya aina xsd: string. Aina hii inafafanuliwa katika lugha ya XSD. Tuliipa hoja hiyo jina req, ambayo ni sawa na jina la hoja la getEcho() mbinu. Tulitaja thamani iliyorejeshwa na njia ya kurudi, aina yake pia ni xsd: kamba.

Majina "getEchoRequest" NA "getEchoResponse" YANATUMIKA KATIKA KIPINDI KIJACHO. Kutaja vigezo vya pembejeo na pato la huduma ya Wavuti. Ina kipengele kimoja . Hii ina maana kwamba huduma ya Wavuti hutoa huduma moja ambayo jina lake "getEcho" ni sawa na jina la njia inayotekeleza huduma hiyo. Kipengele kinabainisha ingizo na siku ya mapumziko vigezo vya huduma. Kisha, kipengele tumebainisha njia moja ya kutuma ujumbe - mtindo wa kiutaratibu ujumbe wa SOAP unaotumwa kwa itifaki ya HTTP, kama inavyoonyeshwa na kipengele.

txarspcrt^=^"ht:tp^://?chepas^.>plscap^.c^rc^/?cap^/ht:tp^" />

Ikiwa mtindo wa hati ya SOAP unatumiwa, sifa ya mtindo imewekwa kuwa "hati".

Hatimaye, katika kipengele kipengee kilichowekwa Kuunganisha kipengele yenye kipengele

, ikionyesha anwani ambapo huduma ya Wavuti iko.

Katika Orodha 4.2, majina yaliyoangaziwa na sabuni yalibainisha maelezo ya ujumbe na jinsi ulivyotumwa. Wacha tuone ni itifaki gani maalum ambazo vipimo vya WSDL 1.2 hutoa.

Fasihi:

Khabibullin I. Sh. Maendeleo ya huduma za Wavuti kwa kutumia Java. - St. Petersburg: BHV-Petersburg, 2003. - 400 p.: mgonjwa.