Giáo trình Java - Chương 3: Phát triển Web Service với các công nghệ chuẩn của Java
Bài viết gồm 6 phần:
I. Giới thiệu
II. Tổng quan các công nghệ
III. Các công nghệ nền tảng của Web Service
IV. Các công nghệ của Java hỗ trợ Web Service
V. Các công cụ để sử dụng các côngnghệ của Java cho web
VI. Mô hình lập trình
sử dụng để đánh dấu một lớp Java là thi hành web service hoặc là đánh dấu một interface định nghĩa web service interface. o @WebMethod làm cho một phương thức trở thành một phương thức web service. 1.2. Sử dụng công công cụ apt để biên dịch • Chúng ta phải đảm bảo các thư viện của WSDP đều có trong class path. • Tạo file build.xml. Định nghĩa apt ant task: Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội <taskdef classpathref="project.classpath" name="apt" classname="com.sun.tools.ws.ant.Apt"> • Sau đó tạo một target build: • Chúng ta sử dụng câu lệnh ant build để chạy file build.xml từ dòng lệnh hoặc có thể sử dụng Eclipse để chạy file build.xml. • Sau khi build xong chúng ta sẽ thấy apt tạo thêm một số file java cho web service. 1.3. Đóng gói thành ứng dụng web Viết file cấu hình định nghĩa web service sun-jaxws.xml với nội dung sau <endpoint name='HelloService' Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội implementation='helloservice.endpoint.Hello' url-pattern='/hello'/> • Thẻ endpoint dùng để định nghĩa một web service end point. Thuộc tính name xác định tên của web service. Thuộc tính implementation xác định lớp thực thi web service. url- pattern là đường dẫn tương đối của ứng dụng với ứng dụng web chúng ta triển khai web service ( • Viết file cấu hình web cho ứng dụng web: web.xml <web-app xmlns="" version="2.5" xmlns:xsi="" xsi:schemaLocation=" "> HelloService <listener- class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener HelloService HelloService com.sun.xml.ws.transport.http.servlet.WSServlet HelloService /hello Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội 30 • Tương ứng với mỗi web service được định nghĩa trong file sun-jaxws.xml chúng ta sẽ định nghĩa một servlet trong file web.xml. Display name và servlet name có cùng tên với web service, servlet class là mặc định. url-pattern tương ứng với url-pattern của web service trong file sun.jaxws.xml. • Tạo thêm một target create-war trong file build.xml để đóng gói ứng dụng thành ứng dụng web. Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội • Build từ dòng lệnh với câu lệnh ant create-war hoặc build từ trong Eclipse. • Chúng ta sẽ nhận được một file là hello.war. 1.4. Triển khai ứng dụng • Copy file war vào web server tomcat 5.5 hoặc JBoss 4.03 sau đó gõ vào trình duyệt dòng sau để kiểm tra: ---------------------------------------- ------------- Một số đường dẫn đến các file thư viện trong bài ví dụ mình viết để đường dẫn tuyệt đối. Các bạn khi download về thì phải sửa cho đúng với đường dẫn trên máy của bạn mới chạy được. ---------------------------------------- ------------- 2. Client Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội Figure 5 Cấu trúc cây thư mục • Định nghĩa wsimport ant task trong file build.xml <taskdef classpathref="project.classpath" name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> Tạo một target import-webservice: <wsimport destdir="src" sourcedestdir="src" wsdl=""> • Sau khi chạy target import-webservice chúng ta sẽ nhận được các file java tương ứng để làm việc với web service ở phía server. • Viết một lớp Run để kiểm tra Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội Run.java package helloservice.endpoint; import javax.xml.ws.WebServiceRef; public class Run { static HelloService helloService=new HelloService(); public static void main(String[] args) { Run run=new Run(); run.doTest(); } public void doTest() { System.out.println(helloService); Hello client=helloService.getHelloPort(); System.out.println(client.sayHello("Le Manh Cuong")); UserBean userBean; Document document; try { userBean=client.getUserBean("cuonglm"); } catch (Exception_Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội userBean=client.getUserBean("linhpk"); document=userBean.getDocument(); System.out.println(userBean.getUsername()); System.out.println(userBean.getPassword()); System.out.println(document.getName()); System.out.println(document.getCreatedDate()); } catch (Exception_Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } I. Những thiết lập cần thiết cho dịch vụ web viết bằng Java 1. Danh sách các tập tin cần tải xuống a) Apache Tomcat (phiên bản 5.0.30) b) Apache Axis (phiên bản 1.4) c) Xerces (version 2.6.2) Chú ý: Đó là phiên bản mới nhất khi viết bài này, có thể có những bản mới hơn tại các địa chỉ trên 2. Cài đặt Apache Tomcat Chúng ta có thể tải tomcat có tên jakarta-tomcat-5.0.30.zip tại địa chỉ Rồi bạn có thể cài đặt hoặc giải nén nó. Tôi giả sử bạn đã cài đặt hoặc giải nén Apache tomcat ở trong thư mục G:\WebService\tomcat và thư mục và thư mục JDK là G:\WebService\j2sdk1.4.2_11 Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội 3. Cấu hình biến môi trường Bây giờ tất cả thư viện của Apache tomcat được cài đặt trên máy của bạn, bạn cần phải chỉ cho Java biết vị trí của chúng. Điều này có thể thực hiện bằng cách thiết thông qua biến môi trường CLASSPATH. set JAVA_HOME=G:\WebService\j2sdk1.4.2_11 set CATALINA_HOME=G:\WebService\tomcat set CATALINA_LIB=%CATALINA_HOME%\common\lib set CLASSPATH=%CLASSPATH%;.;%CATALINA_LIB%\mail.jar; %CATALINA_LIB%\activation.jar;%CATALINA_LIB%\servlet.jar set PATH=%PATH%;%JAVA_HOME%\bin;%CATALINA_HOME%\bin 4. Điều kiện cần thiết để sử dụng Apache Axis Tôi giả sử rằng bạn cài đặt Apache Axis vào thư mục G:\WebService\axis. Sau đó, bạn phải thiết lập biến môi trường đến các thư viện Apache Axis set AXIS_LIB=G:\WebService\axis\lib set CLASSPATH=%CLASSPATH%; %AXIS_LIB%\axis.jar; %AXIS_LIB%\axis-ant.jar; %AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar; %AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\saaj.jar; %AXIS_LIB%\wsdl4j.jar Sau khi thiết lập đầy đủ các thư viện cho Apache Axis, bạn cần tạo một đường dẫn ngữ cảnh ứng dụng web đến thư mục G:\WebService\axis\webapps\axis hoặc chép thư mục G:\WebService\axis\webapps\axis vào trong thư mục G:\WebService\tomcat\webapps. Sau đó bạn khởi động máy chủ web bằng lệnh: startup. Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội II. Tích hợp Java và .NET sử dịch vụ web 1. Viết dịch vụ web bằng Axis và .NET Trong phần này, chúng ta sẽ tích hợp dịch vụ web viết bằng ngôn ngữ java sử dụng thư viện Apache Axis với dịch vụ web viết bằng ngôn ngữ.NET. Chúng ta sẽ viết 2 dịch vụ web bằng cách sử dụng thư viện Apache Axis và .NET. Sau đó chúng ta sẽ viết 2 chương trình bằng ngôn ngữ Java và .NET để sử dụng các dịch vụ web này. Dưới đây là mô hình minh họa ví dụ Đầu tiên chúng ta sẽ viêt dịch vụ web bằng ngôn ngữ .NET namespace CsharpService { [WebService(Namespace="net")] public class NetService : System.Web.Services.WebService { … [WebMethod] public string getCSharpMessage() { return "This is message from MS .NET"; } } } Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội Tiếp theo là dịch vụ web bằng ngôn ngữ Java sử dụng thư viện Apache Axis public class Axis { public String getAxisMessage() throws Exception { return "This is message from Apache Axis"; } } Đổi tên tập tin thành Axis.jws, Chép nó vào thư mục G:\WebService\tomcat\webapps\axis and restart Apache Tomcat. 2. Tiếp đến chúng ta sẽ tạo các chương trình ở phía người dùng bằng ngôn ngữ Java và .NET sử dụng các dịch vụ web trên Trước khi chúng ta viết một ứng dụng .NET dùng các dịch vụ web này thì chúng ta phải tạo WSDL để chương trình.NET có thể tham chiếu đến các dịch vụ web. Đối với dịch vụ web viết bằng Apache Axis thì chúng ta sử dụng URL: để tham chiếu đến dịch vụ web Apache Axis Và đây là mã nguồn của ứng dụng.NET sử dụng các dịch vụ web kể trên using System; namespace CsharpClient { class Csharp { public CSharp() { //Call .NET Web Service NetRef.NetService net = new NetRef.NetService(); Console.WriteLine(net.getCSharpMessage()); AxisRef.AxisService axis = new AxisRef.AxisService(); Console.WriteLine(axis.getAxisMessage()); Console.Read(); } static void Main(string[] args) { Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội CSharp cs = new CSharp(); } } } Với NetRef, AxisRef là các tên tham chiếu đến dịch vụ web tương ứng với các dịch vụ web viết bằng.NET và Apache Axis Tiếp đến chúng ta sẽ viết ứng dụng Java sử dụng các dịch vụ web trên. Để gọi các dịch vụ này, chúng ta phải tạo các proxy đến các dịch vụ web này.Lệnh dưới đây dùng để tạo một proxy của java đến dịch vụ web của .NET java org.apache.axis.wsdl.WSDL2Java Tiếp đến, chúng ta sẽ tạo proxy đến dịch vụ web viết bằng Apache Axis,tương tự như dịch vụ web của .NET chúng ta chỉ cần thay thế URL của dịch vụ web viết bằng .NET bằng dịch vụ viết bằng Apache Axis như sau: java org.apache.axis.wsdl.WSDL2Java -p axis Sau khi chúng ta tạo các proxy java đến các dịch vụ web này chúng ta sẽ có các thư mục chứa các lớp proxy đến các dịch vụ này có tên tương ứng là net và axis Bây giờ chúng ta có thể viết chương trình bằng ngôn ngữ Java sử dụng các dịch vụ web trên import axis. *; import net.*; public class GetAllType { public static void main(String [] args) throws Exception { //Call MS .NET NetServiceLocator netLocator = new NetServiceLocator(); NetServiceSoap net = netLocator.getNetServiceSoap(); System.out.println(net.getCSharpMessage()); //Call Apache Axis AxisServiceLocator axisLocator = new AxisServiceLocator(); Giáo trình Java Ths. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội localhost.axis.Axis_jws.Axis axis = axisLocator.getAxis(); System.out.println(axis.getAxisMessage()); } } III. Tài liệu tham khảo
File đính kèm:
- Giáo trình Java - Chương 3_Phát triển Web Service với các công nghệ chuẩn của Java.pdf