1 / 38

3SA07: Web Services I

3SA07: Web Services I. อ.สันติชัย ช่วยวงศ์. suntichai@coe.psu.ac.th. Outline. Web Services สถาปัตยกรรมของ Web Service การใช้งาน Web Service ในการทดลองนี้ Java API for XML Web Services (JAX-WS) การพัฒนา Web Service Client โดยใช้ JAX-WS

ouida
Download Presentation

3SA07: Web Services I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3SA07: Web Services I อ.สันติชัย ช่วยวงศ์ suntichai@coe.psu.ac.th

  2. Outline • Web Services • สถาปัตยกรรมของ Web Service • การใช้งาน Web Service ในการทดลองนี้ • Java API for XML Web Services (JAX-WS) • การพัฒนา Web Service Client โดยใช้ JAX-WS • การใช้ NetBeans ในการพัฒนา Web Service Client ด้วย JAX-WS • การพัฒนา Web Service Client ใน Web Application • แหล่งข้อมูลเพิ่มเติม

  3. Web Services • Web Service คือ โปรแกรมชนิดหนึ่งที่สามารถเรียกใช้ได้จากเครื่องคอมพิวเตอร์เครื่องอื่น • Web Service เปรียบเหมือนฟังก์ชันหรือเมธอด ที่สามารถเรียกใช้ได้จากคอมพิวเตอร์เครื่องอื่น • Web Service Client สามารถเรียกเมธอดได้โดยการส่ง request message ซึ่งใช้โปรโตคอล SOAP ไปยังเครื่องเปิดบริการ Web Service • Web Service Client อาจจะเป็น application ที่พัฒนาด้วยภาษาใดก็ได้ หรืออาจจะเป็น web application ก็ได้ • เนื่องจากใช้มาตรฐานเดียวกัน • ตัวอย่างของ Web Service ได้แก่ Web Service สำหรับสอบถามราคาน้ำมัน, Web Service สำหรับการค้นหาข้อมูลต่างๆ เป็นต้น

  4. Simple Object Access Protocol (SOAP) • SOAP เป็นโปรโตคอลที่ Web Service Client ใช้ในการเรียกใช้และรับผลลัพธ์จาก Web Service • Request message เปรียบเหมือน message ที่ใช้ในการเรียกเมธอด (Web Service) • Response message ใช้ในการบรรจุผลลัพธ์ของ Web Service หรือเปรียบเหมือนค่าที่ return จากการเรียกเมธอด • SOAP ทำงานอยู่เหนือโปรโตคอล HTTP (เป็นส่วนใหญ่) • Request และ response message จะอยู่ในรูปของเอกสาร XML

  5. ประโยชน์ของ Web Services • ช่วยให้ผู้พัฒนา application หรือ web application สามารถเพิ่มความสามารถให้กับโปรแกรมได้อย่างรวดเร็ว • เนื่องจากสามารถเรียกใช้ Web Service โดยการส่ง input และรอรับ output โดยไม่จำเป็นต้องรู้หลักการทำงานของ Web Service แต่ละตัว • Web Service ได้ถูกกำหนดเป็นมาตรฐาน ทำให้ application ที่เป็น client ไม่จำเป็นต้องพัฒนาด้วยภาษาเดียวกันกับ Web Service

  6. สถาปัตยกรรมของ Web Services (อย่างง่าย)

  7. WSDL • WSDL ย่อมาจาก Web Services Description Language • เป็นภาษาที่ใช้พื้นฐานมาจาก XML • WSDL ใช้ในการให้คำอธิบาย Web Service • ที่อยู่ของ Web Service หรือที่เรียกว่า Universal Resource Indicator (URI) • ชื่อเมธอด, ชนิดของ input และ output parameter • และรายละเอียดอื่นๆ

  8. WSDL(ต่อ) • ผู้ที่พัฒนา Web Service จะต้องเตรียมไฟล์ WSDL เพื่ออธิบาย Web Service แต่ละตัว • ผู้ที่พัฒนา Web Service Client สามารถอ่านคำอธิบายในไฟล์ WSDL ดังกล่าวและสามารถเรียกใช้ Web Service ได้อย่างถูกต้อง • กระบวนการที่ client เรียกใช้ (call) Web Service เรียกอีกอย่างหนึ่งว่า กระบวนการ Bind

  9. UDDI • Universal Description Discovery and Integration • UDDI เป็นเหมือนที่เก็บข้อมูลของ Web Service • UDDI จะกำหนดวิธีการ publish และค้นหา (find) Web Service ต่างๆ • ในการทดลองนี้จะยังไม่กล่าวถึง UDDI

  10. การใช้งาน Web Services ในการทดลองนี้ • พัฒนา Web Service Client ที่สามารถเรียกใช้ Web Services ที่เปิดให้บริการอยู่ใน Internet ได้ • รู้ที่อยู่ของไฟล์ WSDL ของ Web Service ที่ต้องการเรียกแล้ว • ยังไม่กล่าวถึง UDDI เนื่องจากยังไม่มีการค้นหา Web Service • ยังไม่มีการสร้างและเปิดให้บริการ Web Service • สามารถพัฒนา Web Service Client ได้ทั้งใน Java application และ web application

  11. ขั้นตอนการพัฒนา Web Service Client • ศึกษารายละเอียดของ Web Service จากไฟล์ WSDL • ดาวน์โหลดจากเว็บไซต์ของผู้ให้บริการ Web Service • สร้าง SOAP request message • กำหนดชื่อเมธอด และค่า input parameter • เรียกเมธอดโดยการส่ง request message ไปยัง server ที่ให้บริการ Web Service • ที่อยู่ของ Web Service ดูได้จาก URI ที่ระบุไว้ในไฟล์ WSDL

  12. Java API for XML Web Services (JAX-WS) • JAX-WS เป็น Java API ที่ช่วยอำนวยความสะดวกในการสร้าง, เปิดให้บริการ และเรียกใช้ Web Service • การแปลงระหว่างไฟล์ WSDL กับ Java class • การสร้างและแปลความหมายของ SOAP message • การรรับและส่ง SOAP message • ช่วยให้ผู้พัฒนาโปรแกรมสามารถเรียกใช้ Web Service ได้เหมือนกับการเรียกเมธอดทั่วไป

  13. การติดตั้ง JAX-WS • ในกรณีที่ใช้ JDK 6.0 ไม่ต้องติดตั้งเพิ่มเนื่องจาก JAX-WS เป็น API ที่มีอยู่ใน JDK 6.0 อยู่แล้ว • สำหรับ JDK เวอร์ชัน 5.0 ให้ดาวน์โหลดไฟล์ติดตั้งได้ที่ URL https://jax-ws.dev.java.net/ • เวอร์ชันล่าสุด (22 ม.ค. 51) คือเวอร์ชัน 2.1.3 • ไฟล์ติดตั้งคือไฟล์ JAXWS2.1.3-20071218.jar • รันไฟล์ติดตั้งด้วยคำสั่ง java -jar JAXWS2.1.3-20071218.jar

  14. การติดตั้ง JAX-WS(ต่อ) • จะได้ไดเรกทอรีชื่อ jaxws-ri • Copy ไฟล์ .jar ทุกไฟล์ที่อยู่ในไดเรกทอรี jaxws-ri/lib ไปไว้ในไดเรกทอรี %JAVA_HOME%/jre/lib/ext • เพื่อให้คำสั่ง javac หรือ java รู้จักคลาสต่างๆ ของ JAX-WS • เพิ่มตัวแปรของระบบชื่อ JAXWS_HOME โดยกำหนดให้ชี้มาที่ไดเรกทอรี jaxws-ri (ใส่ path เต็ม) • เพิ่มไดเรกทอรี jaxws-ri/bin (ใส่ path เต็ม) ลงในตัวแปรของระบบที่ชื่อ PATH เพื่อให้สามารถเรียกใช้ bat file ที่อยู่ในไดเรกทอรีนี้ได้ (wsimport.bat, wsgen.bat)

  15. ขั้นตอนการพัฒนา Web Service Client โดยใช้ JAX-WS • ดาวน์โหลดไฟล์ WDSL ของ Web Service ที่ต้องการจะเรียก หรืออาจจะใช้เพียงแค่ URL ของไฟล์ดังกล่าวโดยไม่ต้องดาวน์โหลดก็ได้ • ใช้คำสั่ง wsimport (เป็น bat file ของ JAX-WS) ในการสร้าง Java class ที่เป็นตัวแทนของ Web Service ที่ต้องการจะเรียก • โดยใช้ข้อมูลจากไฟล์ WSDL ข้างต้น • เขียน Java application หรือ web application ที่เรียกเมธอดของคลาสที่เป็นตัวแทนของ Web Service • เรียกเมธอดเหมือนกับการเขียนโปรแกรมปกติ

  16. ตัวอย่างการพัฒนา Web Service Client • ตัวอย่างนี้เป็นการพัฒนา Web Service Client ที่เป็น Java application • Web Service ที่ต้องการเรียกเป็น Web Service ที่ใช้ในการตรวจสอบหมายเลข IP address และบอกได้ว่า IP address ดังกล่าวเป็นของโฮสต์ที่อยู่ในประเทศใด • ดาวน์โหลดไฟล์ WSDL ได้ที่ URL ต่อไปนี้ http://www.webservicex.net/geoipservice.asmx?WSDL

  17. รายละเอียดของ Web Service ที่ระบุไว้ในไฟล์ WSDL(ต่อ) • Service Name: GeoIPService • Service นี้มี port ที่ใช้โปรโตคอล SOAP จำนวน 1 port และมีชื่อว่า GeoIPServiceSoap • port เป็นเหมือนจุดที่ใช้ในการเข้าถึง web service ซึ่งจะมีการระบุ address ของ service เอาไว้ • Port ที่ชื่อ GeoIPServiceSoap มี operation (method) ให้เรียกใช้ได้จำนวน 2 เมธอดคือ GetGeoIPContext และ GetGeoIP

  18. รายละเอียดของ Web Service ที่ระบุไว้ในไฟล์ WSDL • เมธอดที่เราสนใจในที่นี้คือเมธอด GetGeoIP ซึ่งสามารถตรวจสอบได้ว่า IP address ที่กำหนดอยู่ในประเทศใด • ดูความสามารถของแต่ละ operation ได้จาก web site เจ้าของ Web Service หรือดูได้จากไฟล์ WSDL

  19. การสร้าง class ที่เป็นตัวแทนของ Web Service • ใช้คำสั่ง wsimport โดยใช้รูปแบบดังนี้ (พิมพ์ในบรรทัดเดียวกัน) wsimport <URL ของไฟล์ WSDL> -p <ชื่อแพ็กเก็จ> • ในกรณีที่ดาวน์โหลดไฟล์ WSDL มาไว้ในเครื่องแล้ว สามารถใส่ path ของไฟล์ แทน URL ได้ • ตัวอย่างเช่น wsimport http://www.webservicex.net/geoipservice.asmx?WSDL –p ws.ipgeo • คำสั่ง import จะสร้างไฟล์ .java และคอมไพล์ ไฟล์ .class ทั้งหมดจะถูกเก็บไว้ในไดเรกทอรี ws.ipgeo ส่วนไฟล์ .java จะถูกลบ

  20. การสร้าง class ที่เป็นตัวแทนของ Web Service (ต่อ) • หากต้องการเก็บ source code (ไฟล์ .java) ให้เพิ่ม option ต่อไปนี้ -keep –s <ชื่อไดเรกทอรีสำหรับเก็บ source code> • ตัวอย่างเช่น wsimport http://www.webservicex.net/geoipservice.asmx?WSDL –p ws.ipgeo –keep –s ws_src • ไฟล์ .java จะถูกนำไปวางไว้ในไดเรกทอรี ws_src ซึ่งผู้พัฒนาโปรแกรมสามารถใช้ในการศึกษาวิธีการเรียกใช้คลาสต่างๆ ได้

  21. คลาสที่ถูก generate โดยคำสั่ง wsimport • class หรือ interface ที่ถูก generate โดยคำสั่ง wsimport จะมีการใช้ annotationจำนวนมากเพื่อกำหนดค่าของพารามิเตอร์ต่างๆ ในการติดต่อตามมาตรฐานของ Web Service • Annotation จะมีเครื่องหมาย @ นำหน้า ซึ่งจะถูกเรียกใช้โดย class ของ JAX-WS • ในการอ่าน code เบื้องต้น ให้นักศึกษาปิด code ที่เป็น annotation และพิจารณาเฉพาะ Java code เท่านั้น จะช่วยให้เข้าใจได้ง่ายขึ้น • Service class เป็นคลาสที่มีชื่อเดียวกับ service name ที่ระบุไว้ในไฟล์ WSDL ในตัวอย่างนี้คือคลาส GeoIPService • Port interface เป็น interface ที่มีชื่อเดียวกับ Port ซึ่งในตัวอย่างนี้คือ interface ชื่อ GeoIPServiceSoap

  22. Service Class • Service class ประกอบด้วย constructor และ method สำหรับอ่าน reference ไปยัง endpoint object public class GeoIPService extends Service { private final static URL GEOIPSERVICE_WSDL_LOCATION; private final static Logger logger = Logger.getLogger(ws.ipgeo.GeoIPService.class.getName()); public GeoIPService(URL wsdlLocation, QName serviceName){ //.. } public GeoIPService() { //... } public GeoIPServiceSoap getGeoIPServiceSoap(){ //... } public GeoIPServiceSoap getGeoIPServiceSoap (WebServiceFeature... features) { //... } }

  23. Port Interface • Port Interface มีเมธอดที่เป็นชื่อเดียวกับ operation ที่ระบุไว้ในไฟล์ WSDL public interface GeoIPServiceSoap { public GeoIP getGeoIPContext(); public GeoIP getGeoIP(String ipAddress); } • ทั้งสองเมธอดมีการ return ค่าเป็นชนิด GeoIP • ดูรายละเอียดเพิ่มเติมจากคลาส GeoIP ว่าผลลัพธ์ของ operation นี้มีรายละเอียดอะไรบ้าง • เป็นรายละเอียดเกี่ยวกับประเทศที่เป็นที่ตั้งของ IP address ที่ต้องการตรวจสอบ

  24. ขั้นตอนการเขียนโปรแกรมเพื่อเรียกใช้ service class • Copy ไดเรกทอรีที่ generate ด้วย wsimport (ส่วนที่แพ็กเกจของไฟล์ .class) ไปวางในไดเรกทอรีที่จะเขียนโปรแกรม • ในตัวอย่างนี้คือไดเรกทอรี ws • import คลาสต่างๆ ในแพ็กเกจดังกล่าว import ws.ipgeo.*; • สร้าง object ของ service class GeoIPService service = new GeoIPService(); • อ่านค่า reference ของ port object GeoIPServiceSoap port; port = service.getGeoIPServiceSoap();

  25. ขั้นตอนการเขียนโปรแกรมเพื่อเรียกใช้ service class(ต่อ) • เรียกใช้เมธอดที่ต้องการผ่าน endpoint object String ipAddr = "158.108.216.5"; GeoIP result = port.getGeoIP(ipAddr); • นำค่าที่ return ไปดำเนินการต่อหรือนำไปแสดงผล • คำแนะนำ • ควรใช้ try-catch กับ code ที่มีการเรียกใช้ Web Service เพื่อป้องกันข้อผิดพลาด เช่น ข้อผิดพลาดเกี่ยวกับระบบเครือข่าย เป็นต้น

  26. IpGeoClient.java import ws.ipgeo.*; public class IpGeoClient { public static void main(String[] args) { GeoIPService service = new GeoIPService(); GeoIPServiceSoap port = service.getGeoIPServiceSoap(); //Lookup IP address of the web server of Kasetsart University String ipAddr = "158.108.216.5"; GeoIP result = port.getGeoIP(ipAddr); //Display result (country information) String ctName = result.getCountryName(); String ctCode = result.getCountryCode(); System.out.println("IP Address: " + ipAddr); System.out.println("Country: " + ctName + ", code: " + ctCode); //Lookup IP address of the web server of the Universityof Tokyo ipAddr = "133.11.128.254"; result = port.getGeoIP(ipAddr); System.out.println("\nIP Address: " + ipAddr); System.out.println("Country: " + result.getCountryName() + ", code: " + result.getCountryCode()); } }

  27. การสื่อสารระหว่าง Client และ Server String ipAddr = "158.108.216.5"; GeoIP result = port.getGeoIP(ipAddr);

  28. การสื่อสารระหว่าง Client และ Server (ต่อ) String ipAddr = "158.108.216.5"; GeoIP result = port.getGeoIP(ipAddr);

  29. การสื่อสารระหว่าง Client และ Server (ต่อ) String ipAddr = "133.11.128.254"; GeoIP result = port.getGeoIP(ipAddr);

  30. การสื่อสารระหว่าง Client และ Server (ต่อ) String ipAddr = "133.11.128.254"; GeoIP result = port.getGeoIP(ipAddr);

  31. การใช้ NetBeans ในการพัฒนา Web Service Client ด้วย JAX-WS • NetBeans มี JAX-WS อยู่ภายในอยู่แล้ว • NetBeans 5.5 ใช้ JAX-WS เวอร์ชัน 2.0 • NetBeans ช่วยอำนวยความสะดวก generate คลาสจากไฟล์ WSDL และการสร้าง code สำหรับ Web Service Client อย่างง่าย • เมื่อต้องการใช้ NetBeans ต้องย้ายไฟล์ .jar ของ JAX-WS เวอร์ชัน 2.1.3 ออกจาก %JAVA_HOME%/jre/lib/ext ก่อน • เพื่อไม่ให้ NetBeans ไปใช้ไฟล์ .jar ดังกล่าว ซึ่งจะเกิดปัญหาตอน build project ได้ • ไฟล์ที่ต้องย้ายออกมาคือไฟล์ jaxws-tools.jar • ทางที่ดีควรย้ายไฟล์ .jar ของ JAX-WS ออกทุกไฟล์

  32. ขั้นตอนการสร้าง Web Service Client ด้วย NetBeans • สร้าง Project ใหม่ ในที่นี้เป็นการสร้าง Java application ชื่อ wsclient • สร้าง Java class และกำหนดให้มีเมธอด main ในคลาสนี้ด้วย • ในที่นี้ตั้งชื่อว่า IpGeoClient.java • เตรียมข้อมูลสำหรับการทำ web service client โดยคลิกขวาที่ชื่อ project แล้วเลือก New  Web Service Client

  33. ขั้นตอนการสร้าง Web Service Client ด้วย NetBeans(ต่อ) • ในหน้าต่าง New Web Service Client • กำหนด URL ของไฟล์ WSDL (ในกรณีที่มีไฟล์ในเครื่องอยู่แล้ว ให้กด browse ในช่อง Local File) • ตั้งชื่อ package เพื่อเป็นที่เก็บคลาสที่ถูก generate • เมื่อกดปุ่ม Finish, NetBeans จะเรียกคำสั่ง wsimport และ generate คลาสต่างๆ จากไฟล์ WSDL ที่กำหนด รวมถึง compile คลาสที่ได้ generate ขึ้น • ดู source code ของไฟล์เหล่านี้ได้ในไดเรกทอรี build/generated/wsimport/client

  34. ขั้นตอนการสร้าง Web Service Client ด้วย NetBeans(ต่อ) • NetBeans สามารถ generate code ในการเรียก service class อย่างง่ายได้ • การสร้าง service object, port object และการเรียกเมธอดเพื่อเรียก Web Service • ที่หน้าต่าง project เลือกโหนด Web Service References และเลือก operation ที่ต้องการ จากนั้น drag เมาส์มาวางในพื้นที่สำหรับพิมพ์ source code • หลังจากนั้นสามารถปรับแต่ง source code ได้ตามต้องการ

  35. การ generate code ที่ใช้ในการเรียกใช้ service class

  36. การสร้าง Web Service Client ใน Web Application • เช่น การใช้ servlet ทำหน้าที่เป็น Web Service Client • ใช้วิธีการเดียวกับ Java Application • ต่างกันที่การ build project จะมีการนำไฟล์ .jar ของ JAX-WS (ที่จำเป็นต้องใช้เมื่อมีการเรียก service class) ใส่ลงในไดเรกทอรี WEB-INF/lib ของ web application ด้วย

  37. แหล่งข้อมูลเพิ่มเติม • Web Services Tutorial • http://www.javapassion.com/webservices/index.html • JAX-WS • https://jax-ws.dev.java.net/ • NetBeans tutorial on Web Services • http://www.netbeans.org/kb/55/websvc-jax-ws.html • แหล่งรวม Web Service • http://www.webservicex.net/WCF/webServices.aspx

More Related