יצירת שירות SOAP עם Spring

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

במדריך זה נראה כיצד ליצור שירות אינטרנט מבוסס SOAP עם Spring Boot Starter Web Services.

2. שירותי אינטרנט SOAP

שירות אינטרנט הוא, בקיצור, שירות עצמאי ממכונה למכונה, המאפשר תקשורת דרך רשת.

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

ה- XML ​​המשמש ב- SOAP יכול להיות מורכב ביותר. מסיבה זו, עדיף להשתמש ב- SOAP עם מסגרת כמו JAX-WS או Spring, כפי שנראה במדריך זה.

3. סגנון פיתוח חוזה ראשון

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

Spring-WS תומך רק בסגנון הפיתוח הראשון של החוזה.

4. הגדרת פרויקט אתחול האביב

אנו הולכים ליצור פרויקט Spring Boot בו נגדיר את שרת ה- SOAP WS שלנו.

4.1. תלות Maven

נתחיל בהוספת ה- אביב-אתחול-המתנע-הורה לפרויקט שלנו:

 org.springframework.boot spring-boot-starter-parent 2.2.6. שחרור 

לאחר מכן, בואו נוסיף את אביב-אתחול-המתנע-שירותי אינטרנט ו wsdl4j תלות:

 org.springframework.boot spring-boot-starter-web-services wsdl4j wsdl4j 

4.2. קובץ ה- XSD

הגישה הראשונה לחוזה מחייבת אותנו ליצור תחילה את התחום (שיטות ופרמטרים) עבור השירות שלנו. אנו נשתמש בקובץ סכימת XML (XSD) ש- Spring-WS ייצא אוטומטית כ- WSDL:

בקובץ זה אנו רואים את הפורמט של ה- getCountryRequest בקשת שירות אינטרנט. אנו מגדירים אותו כך שיקבל פרמטר אחד מהסוג חוּט.

לאחר מכן, אנו מגדירים את פורמט התגובה, המכיל אובייקט מהסוג מדינה.

סוף סוף אנו רואים את מַטְבֵּעַ אובייקט, המשמש בתוך מדינה לְהִתְנַגֵד.

4.3. צור את מחלקות Java של הדומיין

כעת ניצור את שיעורי Java מקובץ XSD שהוגדר בסעיף הקודם. ה תוסף jaxb2-maven יעשה זאת באופן אוטומטי בזמן הבנייה. התוסף משתמש בכלי XJC כמנוע הפקת קוד. XJC מרכיב את קובץ הסכימה XSD לשיעורי Java המאושרים באופן מלא.

בואו להוסיף ולהגדיר את התוסף ב- pom.xml שלנו:

 org.codehaus.mojo jaxb2-maven-plugin 1.6 xjc xjc $ {project.basedir} / src / main / resources / $ {project.basedir} / src / main / java false 

כאן אנו מבחינים בשתי תצורות חשובות:

  • $ {project.basedir} / src / main / resources - המיקום של קובץ ה- XSD
  • $ {project.basedir} / src / main / java - איפה שאנחנו רוצים שיווצר את קוד הג'אווה שלנו

כדי ליצור את שיעורי Java, נוכל פשוט להשתמש בכלי xjc מהתקנת Java שלנו. אם כי בפרויקט Maven שלנו הדברים פשוטים עוד יותר, כמו השיעורים ייווצרו אוטומטית במהלך בניית Maven הרגילה:

לקמפל mvn

4.4. הוסף את נקודת הקצה של שירות האינטרנט של SOAP

מחלקת נקודות הקצה של שירותי האינטרנט SOAP תטפל בכל הבקשות הנכנסות לשירות. הוא יזם את העיבוד ויחזיר את התגובה.

לפני שמגדירים זאת, אנו יוצרים a מדינה מאגר על מנת לספק נתונים לשירות האינטרנט.

@Component public class CountryRepository {פרטית סופית סטטית מפות מדינות = HashMap חדש (); @ PostConstruct בטל פומבי initData () {// אתחל את מדינת המפה} ציבורי מדינה findCountry (שם מחרוזת) {return country.get (name); }} 

לאחר מכן, בואו להגדיר את נקודת הקצה:

@Endpoint מחלקה ציבורית CountryEndpoint {גמר סטטי פרטי פרטי מחרוזת NAMESPACE_URI = "//www.baeldung.com/springsoap/gen"; CountryRepository countryRepository; @Autowired ציבורי CountryEndpoint (CountryRepository countryRepository) {this.countryRepository = countryRepository; } @PayloadRoot (namespace = NAMESPACE_URI, localPart = "getCountryRequest") @ ResponsePayload ציבורי GetCountryResponse getCountry (@RequestPayload GetCountryRequest בקשה) {GetCountryResponse תגובה = GetCountryResponse חדש (); response.setCountry (countryRepository.findCountry (request.getName ())); תגובה חזרה; }} 

להלן מספר פרטים שיש לשים לב אליהם:

  • @Endpoint - רושם את השיעור ב- Spring WS כנקודת סיום של שירות אינטרנט
  • @PayloadRootמגדיר את שיטת המטפל בהתאם ל מרחב שמות ו מקומי חלק תכונות
  • @ תגובה תגובה - מציין ששיטה זו מחזירה ערך למיפוי לעומס התגובה
  • @ RequestPayload - מציין ששיטה זו מקבלת פרמטר למיפוי מהבקשה הנכנסת

4.5. שעועית התצורה של שירותי האינטרנט של SOAP

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

@EnableWs @Configuration בכיתה ציבורית WebServiceConfig מרחיב את WsConfigurerAdapter {// הגדרות שעועית}

@EnableWs מאפשרת תכונות שירות האינטרנט של SOAP ביישום Boot Boot זה. ה WebServiceConfig הכיתה מרחיבה את WsConfigurerAdapter מחלקה בסיסית, אשר מגדירה את מודל התכנות Spring-WS מונע ההערות.

בואו ניצור MessageDispatcherServlet המשמש לטיפול בקשות SOAP:

@Bean ServletRegistrationBean messageDispatcherServlet (ApplicationContext applicationContext) {MessageDispatcherServlet servlet = חדש MessageDispatcherServlet (); servlet.setApplicationContext (applicationContext); servlet.setTransformWsdlLocations (נכון); להחזיר ServletRegistrationBean חדש (servlet, "/ ws / *"); } 

קבענו את המוזרקים ApplicationContext האובייקט של סרוולט כך ש- Spring-WS יוכל למצוא שעועית אביבית אחרת.

אנו מאפשרים גם להפוך את סרוולט המיקום של WSDL. זה משנה את תכונת המיקום של סבון: כתובת ב- WSDL כך שהוא ישקף את כתובת ה- URL של הבקשה הנכנסת.

לסיום, בואו ניצור א הגדרת ברירת מחדל לְהִתְנַגֵד. זה חושף WSDL 1.1 רגיל באמצעות XsdSchema. שם ה- WSDL יהיה זהה לשם השעועית.

@Bean (שם = "מדינות") ציבורי DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema countrySchema) {DefaultWsdl11Definition wsdl11Definition = חדש DefaultWsdl11Definition (); wsdl11Definition.setPortTypeName ("CountriesPort"); wsdl11Definition.setLocationUri ("/ ws"); wsdl11Definition.setTargetNamespace ("// www.baeldung.com/springsoap/gen"); wsdl11Definition.setSchema (מדינות סכמה); החזר wsdl11 הגדרה; } @Bean הציבור XsdSchema מדינות Schema () {להחזיר SimpleXsdSchema חדש (ClassPathResource חדש ("country.xsd")); } 

5. בדיקת פרויקט ה- SOAP

לאחר השלמת תצורת הפרויקט, אנו מוכנים לבדוק זאת.

5.1. בנה והפעל את הפרויקט

ניתן יהיה ליצור קובץ WAR ולפרוס אותו לשרת יישומים חיצוני. במקום זאת נשתמש באביב אתחול, שזו דרך מהירה וקלה יותר להפעלת היישום.

ראשית, אנו מוסיפים את המחלקה הבאה כדי להפוך את היישום להפעלה:

@SpringBootApplication מחלקה ציבורית יישום {public static void main (String [] args) {SpringApplication.run (Application.class, args); }} 

שים לב שאנחנו לא משתמשים בקבצי XML כלשהם (כמו web.xml) כדי ליצור יישום זה. הכל ג'אווה טהור.

כעת אנו מוכנים לבנות ולהפעיל את היישום:

קפיץ אתחול mvn: לרוץ

כדי לבדוק אם היישום פועל כראוי, אנו יכולים לפתוח את ה- WSDL דרך כתובת האתר: //localhost:8080/ws/countries.wsdl

5.2. בדוק בקשת SOAP

כדי לבדוק בקשה, אנו יוצרים את הקובץ הבא ושמנו את בקשתו. Xml:

    סְפָרַד 

כדי לשלוח את הבקשה לשרת הבדיקה שלנו, נוכל להשתמש בכלים חיצוניים כמו SoapUI או סיומת Google Chrome Wizdler. דרך נוספת היא להפעיל את הפקודה הבאה במעטפת שלנו:

תלתל - כותרת "סוג תוכן: טקסט / xml" -d @ request.xml // localhost: 8080 / ws

התגובה המתקבלת עשויה להיות לא קלה לקריאה ללא כניסה או מעברי שורות.

כדי לראות את זה מעוצב, אנו יכולים להעתיק ולהדביק אותו ל- IDE שלנו או לכלי אחר. אם התקנו את xmllib2, נוכל לצנן את הפלט של פקודת התלתל שלנו אל xmllint:

סלסול [אפשרויות שורת פקודה] | xmllint - פורמט -

התגובה צריכה להכיל מידע על ספרד:

     ספרד 46704314 מדריד יורו 

6. מסקנה

במאמר זה למדנו כיצד ליצור שירות אינטרנט SOAP באמצעות Spring Boot. למדנו גם כיצד ליצור קוד Java מקובץ XSD, וראינו כיצד להגדיר את שעועית האביב הדרושה לעיבוד בקשות ה- SOAP.

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


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