JAX-WS תומך בשירותי אינטרנט מבוססי SOAP. חלק 2 מסדרה זו בת ארבעה חלקים בשירותי Java Java מגדיר שירות אינטרנט מבוסס המרת SOAP, בונה ואז מאמת שירות אינטרנט זה באופן מקומי באמצעות שרת ה- HTTP הקל המשמש כברירת מחדל (נדון בחלק 1), מפרש את מסמך WSDL של השירות. , וניגש לשירות מלקוח פשוט.
הגדרת שירות אינטרנט להמרת יחידות
שירות האינטרנט להמרת יחידות, שכיניתי UC, מורכב מארבע פונקציות להמרה בין סנטימטרים לאינץ 'ובין מעלות פרנהייט למעלות צלזיוס. למרות שניתן היה לארכז את הדוגמה הזו כמחלקת Java אחת, בחרתי לפעול לפי שיטות עבודה מומלצות על ידי ארכיטקטורה כממשק Java וכ- Java. רישום 1 מציג את UC
ממשק שירות האינטרנט .
רישום 1. ממשק נקודות הקצה של שירות האינטרנט של שירות ה- UC
package ca.javajeff.uc; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface UC { @WebMethod double c2f(double degrees); @WebMethod double cm2in(double cm); @WebMethod double f2c(double degrees); @WebMethod double in2cm(double in); }
UC
מתאר ממשק נקודות קצה (SEI) , שהוא ממשק Java החושף את פעולות ממשק שירות האינטרנט במונחים של שיטות Java מופשטות. הלקוחות מתקשרים עם שירותי אינטרנט מבוססי SOAP באמצעות ה- SEI שלהם.
UC
מוכרז כ- SEI באמצעות @WebService
ההערה. כאשר מציינים ביאור ממשק או מחלקה של Java @WebService
, כל public
השיטות שהפרמטרים שלהן, ערכי ההחזר והחרגים המוצהרים עוקבות אחר הכללים שהוגדרו בסעיף 5 למפרט JAX-RPC 1.1 המתארים פעולות שירות אינטרנט. מכיוון שרק public
ניתן הכריזו שיטות ממשקים, את public
המילה שהמורה אינה הכרחית כאשר הכרזה c2f()
, cm2in()
, f2c()
, ו in2cm()
. שיטות אלה הן באופן מרומז public
.
גם כל שיטה מסומנת @WebMethod
. אמנם @WebMethod
לא חיוני בדוגמה זו, אך נוכחותה מחזקת את העובדה שהשיטה המבוארת חושפת פעולת שירות אינטרנט.
רישום 2 מציג את UCImpl
הכיתה של שירות האינטרנט .
רישום 2. שעועית יישום השירות של שירות האינטרנט UC
package ca.javajeff.uc; import javax.jws.WebService; @WebService(endpointInterface = "ca.javajeff.uc.UC") public class UCImpl implements UC { @Override public double c2f(double degrees) { return degrees * 9.0 / 5.0 + 32; } @Override public double cm2in(double cm) { return cm / 2.54; } @Override public double f2c(double degrees) { return (degrees - 32) * 5.0 / 9.0; } @Override public double in2cm(double in) { return in * 2.54; } }
UCImpl
מתאר שעועית יישום שירות (SIB) , המספקת יישום של ה- SEI. מעמד זה הוכרז כ- SIB באמצעות @WebService(endpointInterface = "ca.javajeff.uc.UC")
ההערה. endpointInterface
האלמנט מתחבר SIB זו כדי שלה SEI, והוא נחוץ כדי למנוע טעויות מסוג הנמל מוגדרות בעת הפעלת יישום לקוח הציג מאוחר יותר.
implements UC
הסעיף איננו הכרחי. אם סעיף זה אינו קיים, UC
הממשק מתעלם (והוא מיותר). עם זאת, מומלץ לשמור implements UC
כך שהמהדר יכול לוודא ששיטות ה- SEI יושמו ב- SIB.
כותרות השיטה של ה- SIB אינן מבוארות @WebMethod
משום שהערה זו משמשת בדרך כלל בהקשר של ה- SEI. עם זאת, אם היית מוסיף public
שיטה (שתואמת את הכללים בסעיף 5 של מפרט JAX-RPC 1.1) ל- SIB, ואם שיטה זו אינה חושפת פעולת שירות אינטרנט, היית מציין את כותרת השיטה @WebMethod(exclude = true)
. כשאתה מקצה true
אל @WebMethod
ים" exclude
אלמנט, אתה למנוע שיטה מלהיות קשור למבצע.
שירות אינטרנט זה מוכן לפרסום, כך שניתן יהיה לגשת אליו מלקוחות. רישום 3 מציג UCPublisher
יישום שמבצע את המשימה הזו בהקשר לשרת HTTP הקל המשמש כברירת מחדל.
רישום 3. הוצאת UC
import javax.xml.ws.Endpoint; import ca.javajeff.uc.UCImpl; public class UCPublisher { public static void main(String[] args) { Endpoint.publish("//localhost:9901/UC", new UCImpl()); } }
פרסום שירות האינטרנט כולל שיחה אחת לשיטת EndPoint
הכיתה של Endpoint publish(String address, Object implementor)
הכיתה. address
מזהה פרמטר ה- URI שהוקצו לשירות האינטרנט. בחרתי לפרסם שירות אינטרנט זה במארח המקומי על ידי ציון localhost
(שווה ערך לכתובת IP 127.0.0.1) ומספר היציאה 9901
(אשר ככל הנראה זמין). כמו כן, בחרתי באופן שרירותי /UC
כנתיב הפרסום. implementor
פרמטר מזהה מופע של UC
SIB ים".
publish()
השיטה יוצרת ומפרסם נקודת סיום עבור שצוין implementor
האובייקט על הנתון address
, ומשתמשת implementor
הסברי ים" כדי ליצור שפת Definition שירותי האינטרנט (WSDL) ו- XML Schema מסמכים. זה גורם ליצירת ותשתית השרת הדרושה על ידי יישום JAX-WS בהתבסס על תצורת ברירת מחדל כלשהי. יתר על כן, שיטה זו גורמת ליישום לפעול ללא הגבלת זמן. (במחשבי Windows, לחץ בו זמנית על מקשי Ctrl ו- C כדי לסיים את היישום).
בנייה ואימות של שירות האינטרנט
לא קשה לבנות את שירות האינטרנט של UC שהוגדר בעבר. ראשית, עליך ליצור מבנה ספריות מתאים המכיל את הקבצים המתאימים. בצע משימה זו על ידי ביצוע השלבים הבאים:
- בתוך הספריה הנוכחית, צור
ca
ספריה. בתוךca
, צורjavajeff
ספריה. לבסוף, בתוךjavajeff
, צורuc
ספריה. - העתק רישום 1
UC.java
לקובץ מקור ושמור את הקובץ הזה בca/javajeff/uc
. - העתק את רישום 2
UCImpl.java
לקובץ מקור ושמור את הקובץ בוca/javajeff/uc
. - העתק רישום 3
UCPublisher.java
לקובץ מקור ושמור קובץ זה בספריה הנוכחית, המכילה אתca
הספרייה.
המשימה הבאה היא לאסוף את קבצי המקור הללו. בהנחה שלא שינית ספריות, בצע את הפקודה הבאה כדי להרכיב קבצי מקור אלה ב- Java SE 9 (השמט --add-modules java.xml.ws
ב- Java SE 6, 7 או 8):
javac --add-modules java.xml.ws UCPublisher.java
אם קבצי המקור הללו מתקבצים בהצלחה, בצע את הפקודה הבאה להפעלת יישום זה ב- Java 9 (השמט --add-modules java.xml.ws
ב- Java SE 6, 7 או 8):
java --add-modules java.xml.ws UCPublisher
בזמן שהיישום פועל, השתמש בדפדפן אינטרנט כדי לוודא ששירות אינטרנט זה פועל כראוי וכדי לגשת למסמך WSDL שלו. הפעל את דפדפן האינטרנט המועדף עליך והזן את השורה הבאה בשורת הכתובת:
//localhost:9901/UC
איור 1 מציג את דף האינטרנט שהתקבל בדפדפן האינטרנט של Google Chrome.
איור 1. דף האינטרנט של UC מספק מידע מפורט על שירות האינטרנט שפורסם
איור 1 מציג את שמות השירות והיציאות המוסמכים של נקודת הקצה של שירות האינטרנט. (שימו לב ששם החבילה הופך - uc.javajeff.ca
במקום ca.javajeff.uc
). לקוח משתמש בשמות אלה כדי לגשת לשירות.
איור 1 מציג גם את כתובת ה- URI של שירות האינטרנט, את מיקום מסמך ה- WSDL של שירות האינטרנט (כתובת ה- URI של שירות האינטרנט המסופקת על ידי ?wsdl
מחרוזת השאילתה), ואת השם המוסמך לחבילה של מחלקת הטמעת שירות האינטרנט.
פרשנות מסמך WSDL של שירות האינטרנט
המיקום של מסמך WSDL של שירות האינטרנט UC מוצג כקישור. לחץ על קישור זה כדי להציג את מסמך WSDL, שתוכנו מוצג ברשימה 4.
רישום 4. מסמך WSDL של UC
מסמך WSDL הוא מסמך XML עם definitions
אלמנט שורש, אשר עושה כלום מסמך WSDL יותר מאשר אוסף של הגדרות. אלמנט זה כולל שונים xmlns
המאפיינים לזיהוי מרחבים שם סטנדרטיים שונים, יחד עם targetNameSpace
ו name
תכונות:
targetNamespace
התכונה יוצרת מרחב עבור כל האלמנטים המוגדרים על ידי המשתמש במסמך WSDL (כגוןc2f
האלמנט המוגדר באמצעותmessage
האלמנט בשם זה). מרחב שמות זה משמש להבחנה בין האלמנטים המוגדרים על ידי המשתמש של מסמך WSDL הנוכחי ואלמנטים המוגדרים על ידי משתמשים של מסמכי WSDL מיובאים, אשר מזוהים באמצעותimport
האלמנט של WSDL . באופן דומה,targetNamespace
התכונה המופיעהschema
באלמנט של קובץ מבוסס XML Schema יוצרת מרחב שמות עבור רכיבי הסוג הפשוטים המוגדרים על ידי המשתמש, רכיבי התכונה ורכיבי הסוג המורכב.name
תכונה המזהה את שירות האינטרנט והוא משמש רק כדי לתעד את השירות.
מקוננים definitions
הם types
, message
, portType
, binding
, ו service
אלמנטים: