Sfat trimiterea și primirea de mesaje de săpun folosind saaj

Acest conținut face parte din seria: Consiliul

Aveți grijă de articole noi din această serie.

Abilitatea de a trimite și primi mesaje într-un format standard recunoscut de toate sistemele care interacționează este în centrul tehnologiei serviciilor Web. De obicei, acest format este SOAP. Mesajele SOAP pot fi create și trimise de mână, dar multe dintre măsurile necesare, cum ar fi stabilirea unei conexiuni, sau trimiterea unui mesaj, poate fi realizată automat folosind SAAJ (SOAP cu atașamente API pentru Java) - API, care a apărut ca urmare a activității pe interfața software pentru transmiterea de mesaje XML (Java API pentru mesaje XML - JAXM). Acest articol descrie secvența de acțiuni pentru crearea și trimiterea mesajelor SOAP sincronizate.

Întregul proces constă din cinci etape:

  1. crearea unei conexiuni SOAP;
  2. crearea unui mesaj SOAP;
  3. generarea de mesaje;
  4. trimiterea unui mesaj;
  5. primirea răspunsului.

SAAJ este furnizat ca parte a pachetului de dezvoltare pentru Java Web Services Developer Pack 1.2, a se vedea Resurse. Pachetul include, de asemenea, un server Web Tomcat, prin care puteți implementa propriul serviciu Web și aplicații demo.

Instalarea și configurarea Java Web Services Developer Pack 1.2 nu prezintă o problemă dacă doriți să trimiteți mesaje prin serverul Web Tomcat. Dacă, totuși, așa cum faceți în acest articol, doriți să trimiteți mesaje printr-o aplicație separată, atunci sunt necesare unele acțiuni suplimentare.

Acum puteți trimite mesaje de oriunde din sistem folosind propria aplicație.

Structura mesajului SOAP

Să începem prin examinarea structurii mesajelor în sine. În general, un mesaj SOAP constă într-o coajă împărțită în două părți principale: antetul și mesajul propriu-zis. În ciuda faptului că utilizarea acestor componente este lăsată la latitudinea unei anumite cereri, mesajele trebuie să aibă o structură XML specifică similară cu cea prezentată în Listarea 1.

Listarea 1. Mesajul SOAP de probă

În acest exemplu, antetul este gol, iar întreaga parte utilă este inclusă în corpul mesajului. Acest mesaj este folosit pentru a solicita un preț pentru carte.

Stabilirea unei conexiuni și crearea unui mesaj

Primul pas este să creați o instanță a clasei de conexiune și să configurați conexiunea însăși (listare 2).

2. Crearea unei conexiuni

Aplicația poate trimite mesaje SOAP direct prin clasa SOAPConnection. care este acum inclus în pachetul SAAJ sau utilizând un furnizor de mesaje care face parte din pachetul JAXM. Un obiect SOAPConnection este creat folosind fabrica.

De asemenea, fabrica este utilizată pentru a crea mesajul însuși (listare 3).

Listarea 3. Crearea unui mesaj
Diferențele dintre versiuni

Dacă utilizați o versiune diferită a SAAJ, cum ar fi biblioteca care face parte din Axa 1.2, atunci ar trebui să apelați addBodyElement în loc de addChildElement.

Mai întâi, creați un mesaj utilizând obiectul MessageFactory. În acest moment, acesta include deja secțiunile anvelopei și antet. dar acestea sunt încă goale. Un obiect SOAPPart conține un plic. în care, la rândul său, este inclus corpul mesajului. Apoi, variabilele sunt declarate care conțin toate legăturile necesare, în special SOAPBody.

Apoi, trebuie să introduceți corpul mesajului (obiectul SOAPBody) cu date, așa cum se arată în Lista 4.

Listarea 4. Formarea corpului mesajului

Corpul mesajului SOAP este un element XML obișnuit, în care puteți pune elemente imbricate, cum ar fi getPrice. Apoi, puteți adăuga un element isbn și textul corespunzător. Totul se face în același mod ca și în cazul oricărui element DOM.

SAAJ vă permite de asemenea să creați direct un obiect de mesaj SOAPPart dintr-un fișier extern. De exemplu, dacă conținutul XML al mesajului din listare 1 este conținut în fișierul prepped.msg. atunci puteți să-l accesați în loc să creați manual mesajul (listare 5).

Listarea 5. Crearea unui mesaj dintr-un fișier extern

Clasa StreamSource este folosită în mod obișnuit pentru transformările XSL, dar în acest caz, ea deschide pur și simplu fluxul de fișiere de intrare FileInputStream. Ca urmare, am primit un mesaj gata de trimis.

Trimiterea unui mesaj

Când lucrați cu mesaje SOAP sincrone, trimiterea și primirea unui răspuns sunt efectuate într-un singur pas (listare 6).

Listarea 6. Trimiterea unui mesaj
SOAPAction header

Unele servicii Web pot întoarce o eroare solicitând ca antetul SOAPAction din mesaj să fie utilizat pentru identificarea serviciului. Puteți face acest lucru prin setarea valorii necesare în obiectul MIMEHeaders după cum urmează:

MimeHeaders header =
message.getMimeHeaders ();
headers.addHeader ("SOAPAction",
"urn: necesară SOAPAction");

Metoda call () blochează executarea programului până când răspunsul este primit ca obiect SOAPMessage.

Listarea 7. Citirea răspunsului primit

Mai întâi, ca întotdeauna când utilizați XSLT, trebuie să creați un obiect Transformer. În acest caz, trebuie doar să afișăm conținutul mesajului, astfel că foaia de stil nu este utilizată. Conținutul înseamnă partea SOAP a mesajului, nu întregul mesaj, în care atașamentele pot fi încă ascunse. Înainte de procesare, puteți împărți, de asemenea, carcasa și corpul mesajului. Conținutul este afișat în System.out (vezi Figura 1), dar, în principiu, rezultatul transformării poate fi transmis la orice flux de ieșire disponibil. Transformarea însăși are loc în mod obișnuit.

Figura 1. Cererea și răspunsul în SOAP

Pașii următori

În exemplul nostru simplu, mesajul se transmite simplu la fluxul de ieșire standard, dar cu același succes ați putea obține informațiile necesare din documentul XML. În plus, deși în acest articol demonstrează sincrone trimiterea mesajelor și primirea, interfața JAXM, care pot fi descărcate separat, permite utilizarea furnizorului de mesagerie care asigură livrarea asincronă folosind obiect ProviderConnection în loc SOAPConnection. Furnizorul stochează mesajul până când este livrat cu succes.

JAXM sprijină, de asemenea, profile, care facilitează crearea de mesaje SOAP specializate, cum ar fi SOAP-RP sau ebXML.

Descărcați resurse

Subiecte conexe