การสร้างเว็บเซอร์วิส
ตอนที่ 1 สร้าง Web Services ด้วยภาษา Java

การสร้าง Web Services

เนื่องจาก Web Services ได้รับการสนับสนุนจากค่ายผู้พัฒนาภาษาโปรแกรมยอดนิยมทั้ง 3 ค่ายใหญ่คือ Sun Java, Microsoft .NET และ PHP ดังนั้น จึงมีเครื่องมือและไลบรารีช่วยเหลือที่สนับสนุนให้นักพัฒนาโปรแกรมสามารถสร้าง Web Services ขึ้นเพื่อใช้งานกับแพลตฟอร์มของตนเองได้ทันที
อย่างไรก็ตามพบว่าในบางแพลตฟอร์มเช่น Java ยังคงมีนักพัฒนาโปรแกรมที่นิยมใช้เครื่องมืออื่นในการสร้าง Web Services ด้วย เช่น Axis, Apache SOAP, XFire หรือ CXF เป็นต้น ซึ่งในเอกสารฉบับนี้จะขออ้างอิงวิธีการสร้าง Web Services ที่เป็นแบบมาตรฐานกลางของแต่ละภาษา โดยไม่จำเพาะเจาะจงลงไปที่ไลบรารีตัวใดตัวหนึ่ง เพื่อให้นักพัฒนาโปรแกรมสามารถใช้เครื่องมือพื้นฐานที่มีมาให้กับภาษาโปรแกรมนั้นสร้าง Web Services ขึ้นใช้งานได้ โดยไม่ต้องยุ่งยากกับการติดตั้งไลบรารีเสริม

1. การสร้าง Web Services ด้วยแพลตฟอร์ม Java

1.1 การสร้าง Workspace และ Project

สตาทร์โปรแกรม Eclipse เมื่อปรากฏหน้าต่างสอบถามตำแหน่งที่วาง workspace ให้ใส่ตำแหน่ง workspace เป็น c:\webservice\java\workspace ดังนี้

รูปภาพ 1 การเปิดโปรแกรม Eclipse และการสร้าง Workspace
จะปรากฏ workspace เปล่าที่ยังไม่มี project อยู่เลย ซึ่งเราจำเป็นต้องสร้าง project สำหรับเขียนโปรแกรมภาษา Java ดังนั้นให้ไปที่เมนู File à New à Project … แล้วทำตามขั้นตอนในภาพต่อไปนี้เพื่อสร้าง project ใหม่โดยตั้งชื่อ project เป็น Employee

รูปภาพ 2 การสร้าง project ใหม่ และตั้งชื่อ project เป็น Employee
สาเหตุที่เราตั้งชื่อ project เป็นคำว่า Employee เนื่องจากเราจะสมมุติว่า Web Services ตัวนี้ จะทำหน้าที่ช่วยสืบค้นข้อมูลพนักงานภายในองค์กรของเรา และให้ผลลัพธ์เป็นข้อมูลพนักงาน

1.2 สร้างคลาส Web Services

เราจำเป็นต้องสร้างคลาส (Class) ขึ้นมาเพื่อทำหน้าที่เป็น Web Services และรวบรวมกระบวนการที่เราต้องการ โดยสมมุติให้คลาสชื่อว่า EmployeeManager และมีกระบวนการสองอย่างคือ getEmployee และ getEmployees ตามการออกแบบต่อไปนี้

รูปภาพ 3 การออกแบบคลาส EmployeeManager เพื่อทำหน้าที่เป็น Web Services
เพื่อความรวดเร็วในการทดลองให้เราก็อปปีซอร์สโค้ดตัวอย่างมาจาก DVD ชุดฝึกอบรม โดยลากไฟล์ทั้งหมดที่อยู่ในโฟลเดอร์ provider\java มาวางไว้ที่โฟลเดอร์ src ของโปรเจคเราดังนี้

รูปภาพ 4 การติดตั้งซอร์สโค้ดตัวอย่าง Web Services ภาษา Java จาก DVD ชุดฝึกอบรม
หลังจากนั้นให้ดับเบิลคลิกที่ไฟล์ Rectangle.java เพื่อดูตัวอย่างวิธีการเขียนโปรแกรม Web Services แบบ RPC-Style ด้วยภาษา Java หรือดับเบิลคลิกที่ไฟล์ EmployeeManager.java เพื่อดูตัวอย่างวิธีการเขียนโปรแกรม Web Services แบบ Document-Style ด้วยภาษา Java

1.3 การรัน RPC-Style Web Services

ให้ดับเบิลคลิกที่ไฟล์ Rectangle.java จะพบซอร์สโค้ดดังต่อไปนี้
ซอร์สโค้ด 1 ไฟล์ Rectangle.java
01 package aczept.ws.demo;
02
03 import javax.jws.WebMethod;
04 import javax.jws.WebService;
05 import javax.jws.soap.SOAPBinding;
06 import javax.jws.soap.SOAPBinding.ParameterStyle;
07 import javax.jws.soap.SOAPBinding.Style;
08 import javax.jws.soap.SOAPBinding.Use;
09 import javax.xml.ws.Endpoint;
10
11 @WebService
12 @SOAPBinding(use=Use.LITERAL, style=Style.RPC, parameterStyle=ParameterStyle.WRAPPED)
13 public class Rectangle {
14   @WebMethod
15   public int computeArea(int width, int height) {
16     System.out.println("enter computeArea [" + width + "], [" + height + "]");
17     return width * height;
18   }
19   
20   public static void main(String[] args) {
21     String addr = "http://0.0.0.0:4321/rectangle";
22     Endpoint.publish(addr, new Rectangle());
23   }
24 }
ให้คลิกขวาที่ไฟล์ Rectangle.java แล้วเลือกคำสั่ง Run As à Java Application

รูปภาพ 5 การรันโปรแกรม Rectangle.java เพื่อให้ทำงานเป็น Web Services
โปรแกรม Rectangle.java จะทำงานอยู่ที่เน็ตเวิร์คพอร์ตหมายเลข 4321 และท่านสามารถเปิดดูไฟล์ WSDL ได้โดยใช้เว็บเบราเซอร์ เบราซ์ไปที่ตำแหน่ง URL http://localhost:4321/rectangle?WSDL ดังนี้

รูปภาพ 6 การเปิดดูไฟล์ WSDL ของ Rectangle Web Services

1.4 การรัน Document-Style Web Services

ให้ดับเบิลคลิกที่ไฟล์ EmployeeManager.java จะพบซอร์สโค้ดภาษา Java ที่แสดงถึงวิธีการสร้าง Web Services ในรูปแบบ Document-Style และหากต้องการรันโปรแกรม EmployeeManager.java นี้ให้คลิกขวาที่ไฟล์ EmployeeManager.java แล้วเลือกคำสั่ง Run As à Java Application เช่นเดียวกับการรัน Rectangle.java ที่ทำผ่านมา
ซอร์สโค้ด 2 ไฟล์ EmployeeManager.java
01 package aczept.ws.emp;
02
03 import java.util.ArrayList;
04 import java.util.Date;
05 import java.util.List;
06
07 import javax.jws.WebMethod;
08 import javax.jws.WebService;
09 import javax.jws.soap.SOAPBinding;
10 import javax.jws.soap.SOAPBinding.ParameterStyle;
11 import javax.jws.soap.SOAPBinding.Style;
12 import javax.jws.soap.SOAPBinding.Use;
13 import javax.xml.ws.Endpoint;
14
15 @WebService
16 @SOAPBinding(use=Use.LITERAL, style=Style.DOCUMENT,
parameterStyle=ParameterStyle.BARE)
17 public class EmployeeManager {
18   
19   @WebMethod
20   public Employee getEmployee(Identifier id) {
21     Employee emp = new Employee();
22     emp.setFirstName("Sorapong");
23     emp.setLastName("Ruanmanee");
24     emp.setIdentifier(id);
25     return emp;
26   }
27   
28   @WebMethod
29   public Employees getUpdatedEmployees(String userId) {
30     Employees employees = new Employees();
31     List<Employee> emps = new ArrayList<Employee>();
32     
33     Identifier id1 = new Identifier();
34     id1.setKey("100");
35     id1.setLicense("ABC");
36     Employee emp1 = new Employee();
37     emp1.setFirstName("Sorapong");
38     emp1.setLastName("Ruanmanee");
39     emp1.setIdentifier(id1);
40     emps.add(emp1);
41     
42     Identifier id2 = new Identifier();
43     id2.setKey("200");
44     id2.setLicense("XYZ");
45     Employee emp2 = new Employee();
46     emp2.setFirstName("Natthapong");
47     emp2.setLastName("Ruanmanee");
48     emp2.setIdentifier(id2);
49     emps.add(emp2);
50     
51     employees.setEmployee(emps);
52     return employees;
53   }
54   
55   @WebMethod
56   public Employees getEmployees(String userId) {
57     Employees employees = new Employees();
58     List<Employee> emps = new ArrayList<Employee>();
59     
60     Identifier id1 = new Identifier();
61     id1.setKey("100");
62     id1.setLicense("ABC");
63     Employee emp1 = new Employee();
64     emp1.setFirstName("Sorapong");
65     emp1.setLastName("Ruanmanee");
66     emp1.setIdentifier(id1);
67     emps.add(emp1);
68     
69     Identifier id2 = new Identifier();
70     id2.setKey("200");
71     id2.setLicense("XYZ");
72     Employee emp2 = new Employee();
73     emp2.setFirstName("Natthapong");
74     emp2.setLastName("Ruanmanee");
75     emp2.setIdentifier(id2);
76     emps.add(emp2);
77     
78     employees.setEmployee(emps);
79     return employees;
80   }
81   
82   @WebMethod
83   public Result saveEmployee(Employees employees) {
84     System.out.println("saveEmployee [" + new Date() + "]");
85     Result result = new Result();
86     result.setSuccess(true);
87     return result;
88   }
89   
90   public static void main(String[] args) {
91     String addr = "http://0.0.0.0:5544/employee";
92     Endpoint.publish(addr, new EmployeeManager());
93   }
94 }
เมื่อรัน EmployeeManager แล้วเปิดไปที่ตำแหน่ง URL http://localhost:5544/employee?WSDL จะพบเนื้อหาของไฟล์ WSDL ของเว็บเซอร์วิสตัวนี้ คล้ายดังภาพต่อไปนี้

รูปภาพ 7 การเปิดดูไฟล์ WSDL ของ EmployeeManager Web Services

เมื่อมาถึงขั้นตอนนี้เราจะมี Web Services ที่สร้างขึ้นด้วยภาษา Java รันค้างไว้เพื่อรอรับบริการ อยู่ 2 ตัว และพร้อมสำหรับการทดสอบและลงทะเบียนเว็บเซอร์วิสกับระบบ Web Services Helper System ได้ต่อไป

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การสร้างเว็บเซอร์วิส
ตอนที่ 2 สร้าง Web Services ด้วยภาษา C#.NET

ทำความเข้าใจกับ XML เว็บเซอร์วิส (Web Services) และ SOA