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

