Nguyễn Trọng Dũng Trường ĐHSP Hà Nội 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.. Nguyễn Trọng Dũng Trường ĐHSP Hà Nội • Là ngôn ngữ đánh
Trang 1Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
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ông nghệ của Java cho web
Trang 2Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
Figure 1 Các công nghệ và công cụ WS
Figure 2 Kiến trúc hướng dịch vụ
III Các công nghệ nền tảng của Web Service
1 XML (eXtensible Markup Language)
• Đã trở thành chuẩn cho việc mô tả dữ liệu được trao đổi trên nền web
Trang 3Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
• Là ngôn ngữ đánh dấu, sử dụng các thẻ (tag) để đánh dấu nội dung của văn bản và định nghĩa cấu trúc của thông tin
<element name="FirstName" type="xs:string"/>
<element name="LastName" type="xs:string"/>
<element name="Address" type="USAddress"/>
• Tài liệu XML phải tuân theo một cấu trúc chuẩn (Well-formed)
• Tài liệu XML thường được kết hợp với lược đồ XML (XML Schema) để quy định cú pháp và cấu trúc các thẻ được sử dụng trong tài liệu XML
• Do có các tính chất trên nên tài liệu XML có thể dễ dàng được xử lý bởi các ứng dụng và XML là ngôn ngữ dữ liệu cho Web Service
2 SOAP (Simple Object Access Protocol)
Trang 4Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
Figure 3 Một SOAP Message
• Là giao thức cấp cao dựa vào XML để trao đổi thông tin trong các hệ thống phân tán
• SOAP cung cấp một định dạng chung cho các dữ liệu được trao đổi giữa client và server
• Đơn vị trao đổi thông tin cơ bản của SOAP là 1 SOAP message
• SOAP Message chính là một SOAP Envelope trong đó chứa SOAP Body và có thể chứa SOAP Header
• SOAP Envelope xác định XML Namespace và loại encoding được sử dụng trong SOAP message
• SOAP header được sử dụng để cho các ứng dụng quyết định việc xử lý SOAP message như thế nào
Trang 53 WSDL (Web Service Definition Language)
• Client và server giao tiếp với nhau thông qua việc gửi các SOAP message WSDL định nghĩa ra nội dung và câu trúc của SOAP message đó
• WSDL là tài liệu XML đùng để mô tả interface của Web service
• Tài liệu WSDL định nghĩa một lược đồ XML cho việc mô tả web service
Trang 6Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
<part element="tns:getUserBean" name="parameters"/>
<binding type="tns:Hello" name="HelloPortBinding">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
Trang 7IV Các công nghệ của Java hỗ trợ Web Service
1 JAXP (Java API for XML Processing)
• Là một tập hợp các API cho việc xử lý tài liệu XML
• Bao gồm các tập API con để xử lý tài liệu XML như DOM, SAX
2 JAX-RPC (Java API for XML – Remote Produce Call)
• Tập hợp các API để cung cấp các service bằng XML-RPC
• Cho phép Java gọi các phương thức của Web Service thông qua các hệ thống phân tán
• Không giới hạn việc sử dụng nền Java cho cả client và server Client sử dụng JAX-RPC
có thể gọi Web Service trên các nền tảng khác nhau Client không dùng Java cũng có thể gọi các Web Service sử dụng công nghệ Java với Jax-RPC
• Được thiết kế để đơn giản việc sử dụng SOAP Lập trình viên không cần phải làm công việc xử lý trực tiếp với SOAP mà chỉ cần sử dụng ngôn ngữ Java và các tập API của Java
Trang 8Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
• Từ phiên bản WSDP 2.0 JAX-RPC được đặt tên lại thành JAX-WS
3 JAXB (Java API for XML Data Binding)
• Cung cấp các phương thức để mapping tài liệu XML thành 1 tập hợp các đối tượng Java
và các Interface dựa trên lược đồ XML
• Làm việc trực tiếp với XML thay vì phải xử lý nội dung XML
• Công việc được thực hiện với 2 bước chính đó là:
o Sử dụng bộ binding compiler được cung cấp với JAXB để binding lược đồ XML thành các đối class Java và các interface
o Sử dụng các phương thức gắn kết dữ liệu XML với các class và interface được tạo ra
4 SAAJ (SOAP with Attachment API for Java)
• Một tập hợp API tuân theo đặc tả SOAP with Attachment
• Dùng để tạo ra SOAP message có hoặc không có đình kèm dữ liệu nhị phân
5 XWS (XML and Web Service Sercurity)
• Cung cấp bảo mật cấp SOAP message cho các ứng dụng sử dụng JAX-RPC
• Thông tin bảo mật được chứa trong SOAP header
• Mục đích dùng để chống các sự truy cập trái phép khi message được gửi trên đường truyền
V Các công cụ để sử dụng các công nghệ của Java cho web service
1 APT
• Apt là công cụ cung cấp phương tiện cho việc xử lý các annotation được thêm vào trong Java bởi JSR 175 JSR 175 cho phép lập trình viên khai báo những loại bổ nghĩa cấu trúc mới để kết hợp với thành phần trường, phương thức, class
• Ant task cho apt được cung cấp bởi JAX-WS
• Vd:
<apt
verbose="true|false"
Trang 9Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
classpath="classpath"
destdir="directory for generated class files"
sourcedestdir="directory for generated source files"
Trang 10encoding="specify character encoding used by source files"
target="generate class files for specific virtual machine version">
<option key="keyname" value="keyvalue"/>
<source > </source>
<classpath > </classpath>
</apt>
• Bảng các tuỳ chọn của công cụ apt
verbose: In ra thông báo
classpath: Đường dẫn đến các class và thư viện
destdir: Xác định nơi chứa các class được biên dịch
sourcedestdir: Xác định nơi chứa các file source java được tạo ra
nocompile: Không biên dịch các file source java
print: In ra máy in
debug: Tạo ra các thông tin debug
debuglevel: Cấp độ debug: lines, vars, sources
nowarn: Không tạo ra các cảnh báo
sourcepath: Xác định đường dẫn đến các file source java
Trang 11Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
encoding: Xác định encoding được sử dụng cho các file source java
target: Tạo ra các file class ứng với một phiên bản nhất định
option: Các tuỳ chọn đối với bộ xử lý annotation
• WSImport Ant task được cung cấp bởi JAX-WS
• Bảng các tuỳ chọn của wsimport
wsdl WSDL file
destdir:Xác định đường dẫn chứa các file class được tạo ra
sourcedestdir:Xác định đường dẫn chứa các file source java được tạo ra
verbose: Hiện thông báo
binding: Xác định find dùng để binding dữ liệu
package: Xác định package
• Vd:
<target name="import-webservice">
<echo message="Import web service " />
<wsimport destdir="src" sourcedestdir="src"
wsdl="http://localhost:8080/hello/hello?wsdl">
</wsimport>
</target>
Trang 12Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
Mình đã gửi file đính kèm ví dụ của bài viết ở trong bài đầu tiên
1 Server
Figure 4 Cấu trúc cây thư mục
• Các bước cơ bản để tạo một ứng dụng web service phía server
o Viết các file java
Trang 13Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
o Sử dụng công cụ apt để tạo ra các file class cho web service
o Đóng gói các class và resourse thành ứng dụng web (file war)
o Triển khai ứng dụng
• Yêu cầu phải có cài j2sdk 1.5.06 và có tất cả các thư viện trong bộ WSDP 2.0 Biên dịch các file java ở chế độ tương thích với phiên bản java 1.5
1.1 Viết các file Java
• Viết các java bean được dùng để lưu trữ dữ liệu được truyền giữa client và server
Document.java
package helloservice.endpoint;
import java.util.Date;
public class Document {
private String name;
private Date createdDate;
public Date getCreatedDate() {
Trang 14Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
public void setName(String name) {
public class UserBean {
private String username;
private String password;
private Document document;
public Document getDocument() {
Trang 15public class Hello {
private String message = new String("Hello, ");
public void Hello() {
}
@WebMethod()
public String sayHello(String name) {
Trang 16Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
return message + name;
}
@WebMethod()
public UserBean getUserBean(String username) throws Exception{
if(username.equals("cuonglm")) throw new Exception("User not found");
UserBean userBean=new UserBean();
Document doc=new Document();
• Trong thấy trong file java thi hành web service có sử dụng các annotation
o @WebService được 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:
Trang 17
Giáo trình Java
Ths Nguyễn Trọng Dũng Trường ĐHSP Hà Nội
<taskdef classpathref="project.classpath" name="apt"
Trang 18• Viết file cấu hình web cho ứng dụng web: web.xml
Trang 19service 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
<target name="create-war" description="Packages the WAR file" depends="build">
<echo message="Creating the WAR " />
<delete file="hello.war" />
<war warfile="hello.war" webxml="webconfig/web.xml">
<webinf dir="webconfig" includes="*.xml" excludes="web.xml" />
<zipfileset dir="webconfig" includes="*.wsdl, *.xsd" prefix="/WEB-INF/wsdl" />
Trang 20Giá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
-
-
http://javasimple.wordpress.com
2 Client
Trang 21Giá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">
</taskdef>
Tạo một target import-webservice:
<target name="import-webservice">
<echo message="Import web service " />
<wsimport destdir="src" sourcedestdir="src"
Trang 22public class Run {
static HelloService helloService=new HelloService();
public static void main(String[] args) {
Run run=new Run();
Trang 23I 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)
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ỉ
http://www.apache.org 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
Trang 24Giá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
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
Trang 25Giá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
public string getCSharpMessage() {
return "This is message from MS NET";
}
}
}
Trang 26Giá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";
http://localhost:8080/axis/Axis.jws?wsdl để 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
//Call NET Web Service
NetRef.NetService net = new NetRef.NetService();
Trang 27Giá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
http://localhost/CSharpService/NetService.asmx?wsdl
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 http://localhost:8080/axis/Axis.jws?wsdl 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();
Trang 28Giá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();