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.
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.
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.
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.
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:- 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.
- 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.
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:- Eleza kiolesura cha huduma yetu ya wavuti
- Tekeleza kiolesura hiki
- Zindua huduma yetu ya wavuti
- Andika mteja na upige simu kwa mbali mbinu inayotakiwa huduma ya wavuti
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
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
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
Uendeshaji unaweza kuwa na ujumbe wa ingizo pamoja na ujumbe wa hitilafu.
Kipengele
Kipengele
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.
- <wsdl:ufafanuzi .... >
- <wsdl:huduma .... > *
- <wsdl:bandari name = "nmtoken" binding = "qname" > *
- <-- extensibility element (1) -->
- wsdl:bandari>
- wsdl:huduma>
- 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.
- <wsdl:ufafanuzi .... >
- <wsdl:huduma jina = "nmtoken" > *
- <wsdl:bandari .... /> *
- wsdl:huduma>
- 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.
- Hii ni tafsiri isiyolipishwa na iliyopanuliwa ya hati Lugha ya Maelezo ya Huduma za Wavuti (WSDL) 1.1 ya tarehe 15 Machi 2001.
- 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
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
?
?
?
?
?
? < service >- hubainisha eneo la huduma ya Wavuti kama bandari moja au zaidi. Kila bandari inaelezewa na kipengee kilichowekwa
Mbali na mambo haya makuu sita, kuna vipengele viwili zaidi vya usaidizi.
?
Maoni. Inaweza kujumuishwa katika kipengele chochote
Maelezo ya WSDL.
Tunaweza kusema kwamba vipengele
Vipengele
Hatimaye, vipengele
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" /> "http://localhost:8080/axis/EchoService.jws" /> Katika Orodha 4.2 tuko kwenye kipengele Majina "getEchoRequest" NA "getEchoResponse" YANATUMIKA KATIKA KIPINDI KIJACHO. 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 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.