מבוא ל- JAX-WS

1. סקירה כללית

Java API לשירותי אינטרנט XML (JAX-WS) הוא API סטנדרטי ליצירת וצריכת שירותי אינטרנט מסוג SOAP (Simple Object Access Protocol).

במאמר זה ניצור שירות אינטרנט SOAP ונתחבר אליו באמצעות JAX-WS.

2. סבון

SOAP הוא מפרט XML לשליחת הודעות ברשת. הודעות SOAP אינן תלויות בכל מערכת הפעלה ויכולות להשתמש במגוון פרוטוקולי תקשורת כולל HTTP ו- SMTP.

SOAP הוא XML כבד, ולכן משתמשים בו בצורה הטובה ביותר עם כלים / מסגרות. JAX-WS היא מסגרת המפשטת את השימוש ב- SOAP. זה חלק מג'אווה רגילה.

3. מלמעלה למטה לעומת מלמטה למעלה

ישנן שתי דרכים לבנות שירותי אינטרנט SOAP. אנחנו יכולים ללכת בגישה מלמעלה למטה או בגישה מלמטה למעלה.

בגישה מלמעלה למטה (חוזה ראשון) נוצר מסמך WSDL, ושיעורי Java הדרושים נוצרים מ- WSDL. בגישה מלמטה למעלה (חוזה אחרון), מחלקות Java נכתבות, ו- WSDL נוצר משיעורי Java.

כתיבת קובץ WSDL יכולה להיות די קשה תלוי כמה מורכב שירות האינטרנט שלך. זה הופך את הגישה מלמטה למעלה לאופציה קלה יותר. מצד שני, מכיוון ש- WSDL שלך נוצר משיעורי Java, כל שינוי בקוד עלול לגרום לשינוי ב- WSDL. זה לא המקרה בגישה מלמעלה למטה.

במאמר זה נבחן את שתי הגישות.

4. שפת הגדרת שירותי אינטרנט (WSDL)

WSDL היא הגדרת חוזה של השירותים הזמינים. זהו מפרט של הודעות קלט / פלט וכיצד להפעיל את שירות האינטרנט. הוא נייטרלי לשפה ומוגדר ב- XML.

בואו נסתכל על האלמנטים העיקריים של מסמך WSDL.

4.1. הגדרות

ה הגדרות אלמנט הוא יסוד הבסיס של כל מסמכי WSDL. הוא מגדיר את השם, מרחב השמות וכו 'של השירות, וכפי שאתה יכול לראות, הוא יכול להיות מרווח למדי:

 ... 

4.2. סוגים

ה סוגים רכיב מגדיר את סוגי הנתונים המשמשים את שירות האינטרנט. WSDL משתמש ב- XSD (הגדרת סכמת XML) כמערכת הסיוע המסייעת לתפעול הדדי:

 ...      ... 

4.3. הודעות

ה הוֹדָעָה אלמנט מספק הגדרה מופשטת של הנתונים המועברים. כל אחד הוֹדָעָה אלמנט מתאר את הקלט או הפלט של שיטת שירות ואת החריגים האפשריים:

 ...          ... 

4.4. פעולות וסוגי נמל

ה portType אלמנט מתאר כל אחד מבצע שניתן לבצע וכל הוֹדָעָה אלמנטים המעורבים. לדוגמא, ה get Employee הפעולה מציינת את הבקשה קֶלֶט, תְפוּקָה ואפשרי אשמה יוצא מן הכלל על ידי שירות האינטרנט מבצע:

 ...       ....  ...  

4.5. כריכות

ה כריכה אלמנט מספק פרוטוקול ופורמט נתונים לכל אחד portType:

 ...               ...  ... 

4.6. שירותים ונמלים

ה שֵׁרוּת רכיב מגדיר את היציאות הנתמכות על ידי שירות האינטרנט. ה נמל אלמנט ב שֵׁרוּת מגדיר את שֵׁם, כריכה וה כתובת של השירות:

 ...      ... 

5. גישה מלמעלה למטה (חוזה ראשון)

נתחיל בגישה מלמעלה למטה על ידי יצירת קובץ WSDL עובדי שירות. לשם הפשטות, יש לה רק שיטה אחת:

5.1. מחולל קבצי מקור של שירות אינטרנט מ- WSDL

ישנן מספר דרכים ליצור קבצי מקור לשירות אינטרנט ממסמך WSDL.

אחת הדרכים היא להשתמש ב- wsimport כלי המהווה חלק מ- JDK (ב- $ JAVA_HOME / bin) עד ל- JDK 8.

משורת הפקודה:

wsimport -s. -p com.baeldung.jaxws.server.topdown workerservicetopdown.wsdl

אפשרויות שורת הפקודה המשמשות: -p מציין את חבילת היעד. מציין היכן לשים את קבצי המקור שנוצרו.

עבור גרסאות JDK מאוחרות יותר, אנו יכולים להשתמש תוסף jaxws-maven על ידי MojoHaus כפי שמתואר כאן.

לחלופין, org.jvnet.jaxb2של תוסף maven-jaxb2 יכול להיות שימושי כמפורט בהפעלת שירות אינטרנט SOAP באביב.

הקבצים שנוצרו:

  • EmployeeServiceTopDown.java - הוא ממשק נקודות הקצה של השירות (SEI) המכיל הגדרות שיטה
  • ObjectFactory.java - מכיל שיטות מפעל ליצירת מקרים של שיעורים הנגזרים מתכנית באופן תכנותי
  • EmployeeServiceTopDown_Service.java - הוא מחלקת ספקי השירות שיכולה לשמש לקוח JAX-WS

5.2. ממשק נקודות קצה של שירות אינטרנט

ה wsimport הכלי יצר את ממשק נקודות הקצה של שירות האינטרנט EmployeeServiceTopDown. הוא מצהיר על שיטות שירות האינטרנט:

@WebService (name = "EmployeeServiceTopDown", targetNamespace = "//topdown.server.jaxws.baeldung.com/") @SOAPBinding (parameterStyle = SOAPBinding.ParameterStyle.BARE) @ XmlSeeAlso ({ObjectFactory.class}) ממשק ציבורי EmployeeServiceTopD @WebMethod (action = "//topdown.server.jaxws.baeldung.com/" + "EmployeeServiceTopDown / countEmployees") @WebResult (name = "countEmployeesResponse", targetNamespace = "//topdown.server.jaxws.baeldung.com/ ", partName =" פרמטרים ") int intel Employee עובדים (); }

5.3. יישום שירות אינטרנט

ה wsimport הכלי יצר את המבנה של שירות האינטרנט. עלינו ליצור את הטמעת שירות האינטרנט:

@WebService (name = "EmployeeServiceTopDown", endpointInterface = "com.baeldung.jaxws.server.topdown.EmployeeServiceTopDown", targetNamespace = "//topdown.server.jaxws.baeldung.com/") שכבה ציבורית EmployeeServiceTopDownImplop implementates EmployeeService עובד עובד מאגר פרטי המאגר Impl; @WebMethod int count public עובדים () {החזר עובדRepositoryImpl.count (); }}

6. גישה מלמטה למעלה (חוזה אחרון)

בגישה מלמטה למעלה עלינו ליצור גם את ממשק נקודות הקצה וגם את שיעורי ההטמעה. ה- WSDL נוצר מהשיעורים עם פרסום שירות האינטרנט.

בואו ניצור שירות אינטרנט שיבצע פעולות CRUD פשוטות ב- עוֹבֵד נתונים.

6.1. מחלקת הדוגמניות

ה עוֹבֵד כיתת מודל:

עובד בכיתה ציבורית {מזהה פרטי פרטי; פרטי מחרוזת firstName; // סטרים וקובעים סטנדרטיים}

6.2. ממשק נקודות קצה של שירות אינטרנט

ממשק נקודות הקצה של שירות האינטרנט המצהיר על שיטות שירות האינטרנט:

ממשק ציבורי @WebService EmployeeService {@WebMethod עובד getEm Employee (int id); עובד @WebMethod עובד (עובד מזהה, שם מחרוזת); @WebMethod deleteEm Employee בוליאני (מזהה int); עובד עובד ב- WebMethod (עובד מזהה, שם מחרוזת); // ...}

ממשק זה מגדיר חוזה מופשט לשירות האינטרנט. ההערות המשמשות:

  • @שירות רשת מציין שזה ממשק שירות אינטרנט
  • @WebMethod משמש להתאמה אישית של פעולת שירות אינטרנט
  • @WebResult משמש להתאמה אישית של שם רכיב ה- XML ​​המייצג את ערך ההחזרה

6.3. יישום שירות האינטרנט

מחלקת ההטמעה של ממשק נקודות הקצה של שירות האינטרנט:

@WebService (endpointInterface = "com.baeldung.jaxws.EmployeeService") מעמד ציבורי EmployeeServiceImpl מיישם את EmployeeService {@Inject Private EmployerRepository עובדRepositoryImpl; @WebMethod עובד ציבורי getEmployee (מזהה מזהה) {return workerRepositoryImpl.getEmployee (id); } @WebMethod עדכון עובד ציבורי עובד (עובד מזהה, שם מחרוזת) {החזר עובדRepositoryImpl.updateEmployee (מזהה, שם); } @WebMethod deleteEmployee הציבורי הבוליאני (מזהה int) {החזר עובדRepositoryImpl.deleteEmployee (מזהה); } @WebMethod עובד עובד ציבורי addEm Employee (int id, שם מחרוזת) {return workerRepositoryImpl.addEmployee (id, name); } // ...}

7. פרסום נקודות הקצה של שירות האינטרנט

כדי לפרסם את שירותי האינטרנט (מלמעלה למטה ולמטה למעלה) עלינו להעביר כתובת ומופע של יישום שירות האינטרנט למשרד לְפַרְסֵם() שיטת ה- javax.xml.ws.Endpoint מעמד:

מחלקה ציבורית EmployeeServicePublisher {public static void main (String [] args) {Endpoint.publish ("// localhost: 8080 / workerservicetopdown", EmployeeServiceTopDownImpl () חדש; Endpoint.publish ("// localhost: 8080 / workerservice", EmployeeServiceImpl חדש); }}

עכשיו אנחנו יכולים לרוץ EmployEServicePublisher כדי להפעיל את שירות האינטרנט. כדי להשתמש בתכונות CDI, ניתן לפרוס את שירותי האינטרנט כקובץ WAR לשרתי יישומים כמו WildFly או GlassFish.

8. לקוח שירות אינטרנט מרוחק

בואו ניצור כעת לקוח JAX-WS להתחבר ל- שירות עובדים שירות אינטרנט מרחוק.

8.1. יצירת חפצי לקוח

כדי ליצור חפצי לקוח של JAX-WS, אנו יכולים להשתמש שוב ב- wsimport כְּלִי:

wsimport -keep -p com.baeldung.jaxws.client // localhost: 8080 / workerservice? wsdl

הנוצר שירות עובדים / שירות מחלקה מקפלת את ההיגיון כדי להשתמש ביציאת השרת כתובת אתר ו QName.

8.2. התחברות לשירות האינטרנט

לקוח שירות האינטרנט משתמש במוצר שנוצר שירות עובדים_שירות כדי להתחבר לשרת ולבצע שיחות בשירות אינטרנט מרחוק:

מחלקה ציבורית EmployeeServiceClient {main static void main (String [] args) זורק Exception {URL url = new URL ("// localhost: 8080 / workerservice? wsdl"); EmployeeService_Service employeeService_Service = EmployeeService_Service חדש (url); EmployeeService employeeServiceProxy = employeeService_Service.getEmployeeServiceImplPort (); רשום את כל העובדים = employeeServiceProxy.getAllEmployees (); }}

9. מסקנה

מאמר זה הוא מבוא מהיר לשירותי SOAP באמצעות JAX-WS.

השתמשנו גם בגישות מלמטה למעלה וגם מלמעלה למטה ליצירת שירותי אינטרנט SOAP באמצעות JAX-WS API. כתבנו גם לקוח JAX-WS שיכול להתחבר מרחוק לשרת ולבצע שיחות שירות אינטרנט.

קוד המקור השלם זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found