מדריך לאפאצ'י CXF עם אביב

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

הדרכה זו מתמקדת בתצורה ו באמצעות מסגרת אפאצ'י CXF יחד עם אביב - עם תצורת Java או XML.

זו השנייה בסדרה על אפאצ'י CXF; הראשון התמקד ביסודות ה- CXF כהטמעה של ממשקי ה- API הסטנדרטיים של JAX-WS.

2. תלות Maven

בדומה להדרכה הקודמת, יש לכלול את שתי התלות הבאות:

 org.apache.cxf cxf-rt-frontend-jaxws 3.1.6 org.apache.cxf cxf-rt-transports-http 3.1.6 

לקבלת הגרסאות העדכניות ביותר של חפצי Apache CXF, אנא עיין ב- apache-cxf.

בנוסף, התלות הבאות נחוצות לתמיכה באביב:

 org.springframework spring-context 4.3.1.RELEASE org.springframework spring-webmvc 4.3.1.RELEASE 

הגרסאות האחרונות של חפצי אביב ניתן למצוא כאן.

לבסוף, מכיוון שנקבע את התצורה של התוכנה באמצעות ה- Java Servlet 3.0+ API במקום מסורתי web.xml מתאר פריסה, נצטרך את החפץ להלן:

 javax.servlet javax.servlet-api 3.1.0 

זה המקום בו אנו יכולים למצוא את הגרסה האחרונה של ה- Servlet API.

3. רכיבים בצד השרת

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

3.1. WebApplicationInitilizer מִמְשָׁק

ה WebApplicationInitializer הממשק מיושם להגדרת התוכנה ServletContext ממשק ליישום. כשנוכחים בשביל הכיתה, זה בהפעלה השיטה מופעלת אוטומטית על ידי מיכל servlet ולאחר מכן ה- ServletContext הוא מיידי ומותחל.

כך מגדירים מחלקה ליישום ה- WebApplicationInitializer מִמְשָׁק:

מחלקה ציבורית AppInitializer מיישמת WebApplicationInitializer {@Override public void onStartup (ServletContext container) {// יישום שיטה}}

ה בהפעלה() השיטה מיושמת באמצעות קטעי קוד המוצגים להלן.

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

AnnotationConfigWebApplicationContext context = חדש AnnotationConfigWebApplicationContext (); context.register (ServiceConfiguration.class);

ה ServiceConfiguration המחזור מסומן עם @תְצוּרָה ביאור לספק הגדרות שעועית. שיעור זה נדון בסעיף המשנה הבא.

הקטע הבא מציג כיצד הקשר היישום Spring מתווסף להקשר ה- servlet:

container.addListener (ContextLoaderListener חדש (הקשר));

ה CXFServlet class, המוגדר על ידי Apache CXF, נוצר ונרשם לטיפול בבקשות נכנסות:

ServletRegistration.Dynamic dispatcher = container.addServlet ("dispatcher", CXFServlet חדש ());

הקשר היישום טוען רכיבי קפיצה שהוגדרו בקובץ תצורה. במקרה זה, שם הסרוולט הוא cxfלכן ההקשר מחפש אלמנטים אלה בקובץ בשם cxf-servlet.xml כברירת מחדל.

לבסוף, סרוולט CXF ממופה לכתובת אתר יחסית:

dispatcher.addMapping ("/ services");

3.2. הישן והטוב web.xml

לחלופין, אם אנו רוצים להשתמש במתאר פריסה (מיושן במקצת) ולא ב- WebApplicationInitilizer ממשק, המקביל web.xml הקובץ צריך להכיל את ההגדרות הבאים של סרוולט:

 cxf org.apache.cxf.transport.servlet.CXFServlet 1 cxf / services / * 

3.3. ServiceConfiguration מעמד

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

@Configuration מחלקה ציבורית ServiceConfiguration {// הגדרות שעועית}

השעועית הנדרשת הראשונה היא SpringBus - המספקת הרחבות עבור Apache CXF לעבודה עם מסגרת האביב:

@Bean SpringBus הציבורית springBus () {החזר SpringBus חדש (); }

An EnpointImpl צריך ליצור שעועית גם באמצעות SpringBus שעועית ושירות אינטרנט מיישם. שעועית זו משמשת לפרסום נקודת הקצה בכתובת HTTP הנתונה:

@Bean נקודת קצה ציבורית נקודת סיום () {EndpointImpl endpoint = EndpointImpl חדש (springBus (), BaeldungImpl חדש ()); endpoint.publish ("// localhost: 8080 / services / baeldung"); נקודת סיום חזרה; }

ה BaeldungImpl class משמש ליישום ממשק שירות האינטרנט. הגדרתו ניתנת בסעיף המשנה הבא.

לחלופין, אנו עשויים גם להכריז על נקודת הקצה של השרת בקובץ תצורה של XML. באופן ספציפי, ה- cxf-servlet.xml הקובץ למטה עובד עם ה- web.xml מתאר פריסה כפי שהוגדר בסעיף קטן 3.1 ומתאר את אותה נקודת קצה בדיוק:

שים לב שקובץ התצורה של XML נקרא על שם שם ה- servlet שהוגדר במתאר הפריסה, כלומר cxf.

3.4. הגדרות סוג

הבא - הנה ההגדרה של מיישם שכבר הוזכר בסעיף קטן הקודם:

@WebService (endpointInterface = "com.baeldung.cxf.spring.Baeldung") מעמד ציבורי BaeldungImpl מיישם את Baeldung {מונה אינטימי פרטי; ציבורי מחרוזת שלום (שם מחרוזת) {להחזיר "שלום" + שם + "!"; } רישום מחרוזות ציבורי (סטודנט סטודנט) {counter ++; return student.getName () + "הוא מספר התלמיד הרשום" + מונה; }}

מחלקה זו מספקת יישום עבור באלדונג ממשק נקודות קצה ש- Apache CXF יכלול במטא הנתונים WSDL שפורסמו:

ממשק ציבורי @WebService Baeldung {מחרוזת שלום (שם מחרוזת); מרשם מיתרים (סטודנט סטודנט); }

גם ממשק נקודות הקצה וגם ה- מיישם לעשות שימוש ב- סטוּדֶנט בכיתה, המוגדרת כדלקמן:

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

4. שעועית בצד הלקוח

כדי לנצל את מסגרת האביב, אנו מכריזים על שעועית ב @תְצוּרָה הערה בכיתה:

@Configuration מחלקה ציבורית ClientConfiguration {// הגדרות שעועית}

שעועית עם שם לָקוּחַ מוגדר:

@Bean (name = "client") אובייקט ציבורי createProxy () {return proxyFactoryBean (). Create (); }

ה לָקוּחַ שעועית מייצגת פרוקסי עבור ה- באלדונג שירות רשת. זה נוצר על ידי קריאה ל לִיצוֹר שיטה על א JaxWsProxyFactoryBean שעועית, מפעל ליצירת פרוקסי JAX-WS.

ה JaxWsProxyFactoryBean האובייקט נוצר ומוגדר בשיטה הבאה:

@Bean הציבור JaxWsProxyFactoryBean proxyFactoryBean () {JaxWsProxyFactoryBean proxyFactory = חדש JaxWsProxyFactoryBean (); proxyFactory.setServiceClass (Baeldung.class); proxyFactory.setAddress ("// localhost: 8080 / services / baeldung"); להחזיר proxyFactory; }

המפעל serviceClass המאפיין מציין את ממשק שירות האינטרנט ואילו ה- כתובת המאפיין מציין את כתובת ה- URL של ה- proxy לביצוע הפעלות מרחוק.

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

5. מקרי מבחן

סעיף זה מתאר מקרי בדיקה המשמשים להמחשת תמיכת Apache CXF באביב. מקרי המבחן מוגדרים בכיתה בשם StudentTest.

ראשית, עלינו לטעון הקשר של יישום אביב מהאמור לעיל ServiceConfiguration מחלקת תצורה ושמור אותה במטמון הֶקשֵׁר שדה:

הקשר פרטי ApplicationContext = AnnotationConfigApplicationContext חדש (ClientConfiguration.class);

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

פרטי Baeldung baeldungProxy = (Baeldung) context.getBean ("לקוח");

זֶה באלדונג פרוקסי ישמש במקרי מבחן המתוארים להלן.

במקרה הבדיקה הראשון, אנו מוכיחים שכאשר ה- שלום השיטה מופעלת באופן מקומי על ה- proxy, התגובה זהה לחלוטין לנקודת הסיום מיישם חוזר משירות האינטרנט המרוחק:

@ מבחן ציבורי בטל כאשר משתמשיםHelloMethod_thenCorrect () {תגובת מחרוזת = baeldungProxy.hello ("ג'ון דו"); assertEquals ("שלום ג'ון דו!", תגובה); }

במקרה המבחן השני, הסטודנטים נרשמים לקורסי בלדונג על ידי קריאה מקומית ל להירשם שיטה על ה- proxy, אשר בתורו קורא לשירות האינטרנט. שירות מרוחק זה יחשב את מספרי התלמידים ויחזיר אותם למתקשר. קטע הקוד הבא מאשר את מה שאנחנו מצפים לו:

@ מבחן פומבי בטל כאשר UsRegisterMethod_thenCorrect () {סטודנט סטודנט 1 = סטודנט חדש ("אדם"); סטודנט סטודנט 2 = סטודנט חדש ("חוה"); מחרוזת student1Response = baeldungProxy.register (student1); מחרוזת student2Response = baeldungProxy.register (student2); assertEquals ("אדם רשום סטודנט מספר 1", student1Response); assertEquals ("איב היא סטודנטית רשומה מספר 2", student2Response); }

6. בדיקת אינטגרציה

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

מִלחָמָה

עבודת האריזה מיושמת על ידי תוסף Maven WAR:

 תוסף maven-war 2.6 false 

תוסף זה מארז את קוד המקור המהולל לקובץ WAR. מכיוון שאנו מגדירים את הקשר servlet באמצעות קוד Java, המסורתי web.xml מתאר הפריסה לא צריך להתקיים. כתוצאה מכך, failOnMissingWebXml יש להגדיר נכס ל שֶׁקֶר כדי למנוע כשל בעת הפעלת התוסף.

אנו יכולים לעקוב אחר קישור זה לגירסה העדכנית ביותר של תוסף Maven WAR.

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

יש לכלול את התוספים הבאים בקובץ Maven POM. לפרטים נוספים, עיין במדריך זה לבדיקת שילוב.

הנה תוסף Maven Surefire:

 maven-surefire-plugin 2.19.1 StudentTest.java 

הגרסה האחרונה של תוסף זה נמצאת כאן.

א פּרוֹפִיל סעיף עם תְעוּדַת זֶהוּת שֶׁל שילוב מוכרז כדי להקל על מבחן האינטגרציה:

  שילוב   ... 

תוסף Maven Cargo כלול ב- שילוב פּרוֹפִיל:

 org.codehaus.cargo מטען-maven2-plugin 1.5.0 jetty9x מוטבע localhost 8080 שרת התחלה טרום אינטגרציה-מבחן התחל שרת עצור לאחר שילוב-מבחן עצור 

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

קישור זה מאפשר לנו לבדוק את הגרסה האחרונה של תוסף Maven Cargo.

תוסף Maven Surefire מוכרז שוב, בתוך שילוב פרופיל, כדי לבטל את תצורתו בעיקר לִבנוֹת סעיף ולבצע מקרי בדיקה שתוארו בסעיף הקודם:

 maven-surefire-plugin 2.19.1 מבחן אינטגרציה מבחן אף אחד 

כעת ניתן להפעיל את התהליך כולו על ידי הפקודה: mvn -התקנה נקייה של שילוב.

7. מסקנה

מדריך זה המחיש את תמיכת Apache CXF לאביב. בפרט, הוצג כיצד ניתן לפרסם שירות אינטרנט באמצעות קובץ תצורה של Spring, וכיצד לקוח רשאי לקיים אינטראקציה עם שירות זה באמצעות פרוקסי שנוצר על ידי מפעל proxy של Apache CXF, שהוכרז בקובץ תצורה אחר.

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


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