În cele din urmă, îmi voi împlini promisiunea și voi arăta unde se află fișierul WSDL cu definiția serviciului Web Map Evaluation atunci când joci poker. În secțiunea 15.2.1, am definit deja formatul pentru prezentarea datelor ca schemă în limba Schema XML, în fișierul PokerTypes.xsd. Înainte de a vă deplasa, reveniți la Lista 15.1 pentru a reîmprospăta memoria care arată definiția reprezentării datelor.
Acordați o atenție deosebită numelor pe care le-am ales pentru elementele XML care definesc tipurile de mesaje pentru serviciul web: EvaluateHandRequest și EvaluateHandResponse. Aceste nume au fost alese
nu întâmplător. Acestea au fost alese într-un mod vizat, ținând cont de sprijinul acordat în primăvara anului trecut de principiul avantajelor acordurilor de preconfigurare, care vor crea automat un fișier WSDL pentru serviciul de evaluare a combinațiilor de carduri.
Pentru a activa acest suport, trebuie să configurați DynamicWsdl11Definition.DynamicWsdl11Definition special pentru componente, care este utilizat de către servlet la MessageDispatcherServlet de creare a Nia WSDL din schema Găsește-pe limbajul XML Schema. Este foarte convenabil, din moment ce avem deja diagrama XML Schema care definește formatul de date schaya. Mai jos arată modul în care am configurat componenta DynamicWsdl11Definition în contextul Primăverii:
Componenta DynamicWsdl11Definition citește o descriere a schemei în limba Schema XML din fișierul PokerTypes.xsd, așa cum este definită de proprietatea schemei. Se caută fișierul pentru toate definițiile elementelor care se termină în cuvântul Solicitare sau răspuns. Și bazându-se pe presupunerea că aceste terminații corespund mesajelor trimise sau returnate prin operații de serviciu, ele creează elementele corespunzătoare
De exemplu, procesarea PokerTypes.xsd componentă fișier Wsdl11Definition sugerează că Dynamic elemente EvaluateHandRequest și EvaluateHandResponse descriu mesajele primite și trimise pentru operația numită EvaluateHand. Ca rezultat, se reproduce următoarea definiție a WSDL:
Fig. 15.7. Componenta DynamicWsdl11Definition reda automat definiția WSDL pentru serviciul Web,
bazată pe descrierea schemei din limba Schema XML care definește mesajele pe care le schimbă clienții cu serviciul
Rețineți că componenta DynamicWsdl11Definition a plasat un element
În acest caz, se presupune că serviciul va funcționa pe computerul local, deci dacă îl veți încerca pe un computer la distanță, va trebui să schimbați adresa URL. Rețineți că adresa URL se termină cu linia / services în conformitate cu setările din element
De îndată ce am vorbit despre element
Acum servletul MessageDispatcherServlet poate genera automat (folosind DynamicWsdl11Definition) definiția WSDL a serviciului de evaluare a combinațiilor de carduri atunci când joacă poker. Singura întrebare care rămâne fără răspuns este unde să căutați definiția WSDL generată.
Răspunsul la această întrebare este în ultimul paragraf al acordului, urmat de MessageDispatcherServlet. Observați că am declarat componenta DynamicWsdl11Definition cu ID-ul de poker. Când componenta MessageDispatcherServlet primește o solicitare pentru un URL
/poker.wsdl. va arăta în contextul de primăvară pentru o componentă numită poker care creează definiția WSDL. În acest caz, el găsește componenta DynamicWsdl11Definition.
Utilizând o definiție predefinită WSDL
Componenta DynamicWsdl11Definition poate fi utilizată cu succes într-o varietate de situații, deoarece elimină nevoia
scrieți WSDL - definiți manual. Dar uneori este posibil să aveți nevoie de un control mai complet asupra definiției serviciului WSDL. În astfel de situații, poate fi de dorit să creați manual un fișier WSDL și apoi să îl încorporați în contextul de primăvară folosind SimpleWsdl11Definition:
componenta SimpleWsdl11Definition nu generează WSDL -opredele- a automat (fig. 15.9), se întoarce pur și simplu un WSDL-fișier, al cărui nume este specificat în proprietatea WSDL.
Fig. 15.9. Componenta SimpleWsdl11Definition returnează pur și simplu un fișier predefinit WSDL
Singura problemă cu utilizarea unui fișier predefinit WSDL (altul decât efortul necesar pentru a-l crea) este că este definit static. Aceasta creează complexitate în partea din definiția WSDL care specifică locația serviciului. De exemplu, aruncați o privire la următorul fragment (static) WSDL:
Pentru a face acest lucru, trebuie doar să adăugați parametrul
Implementarea serviciului
Așadar, am creat definiția serviciului, am implementat punctul final și am configurat toate componentele necesare ale cadrului Spring-WS. Acum, totul este pregătit pentru ambalarea și desfășurarea serviciului web. Deoarece am ales instrumentul Maven 2 pentru gestionarea proiectelor, crearea unui fișier WAR pentru o implementare ulterioară este redusă la efectuarea unei comenzi simple:
% mvn implementarea pachetului
Odată ce utilitarul mvn și-a încheiat activitatea, fișierul Poker-WS.war apare în directorul țintă, care poate fi implementat pe majoritatea serverelor de aplicații web.
Un exemplu de utilizare a cadrului Spring-WS de a crea un serviciu web a demonstrat doar jumătate din capabilitățile sale. A doua jumătate include un API client care implementează aceeași paradigmă bazată pe mesaje. Să vedem cum să folosim Spring-WS pentru a crea un client care utilizează serviciul de evaluare a combinațiilor de carduri atunci când joacă poker.