Chương 1 trình bày tổng quan về dịch vụ Web, kiến trúc của dịch vụ Web, mô hình phân tầng trong dịch vụ Web, các phương pháp tiếp cận xây dựng dịch vụ Web kết hợp. Chương 2 trình bày về chất lượng dịch vụ trong dịch vụ Web, các thuộc tính chất lượng dịch vụ, các phương pháp cung cấp chất lượng dịch vụ. Vấn đề đám phán trong dịch vụ Web như chính sách đàm phán, giao thức đàm phán, thông điệp đàm phán cũng được trình bày trong chương này. Chương 3 trình bày tổng quan về Axis2, các đặc điểm của Axis2, giới thiệu các mô đun trong Axis2 bao gồm: mô đun xử lý XML, mô đun thông tin, mô đun xử lý thông điệp SOAP, mô đun triển khai, mô đun client API.
Các mô đun này là z 2 những thành phần chính trong kiến trúc Axis2. Mỗi mô đun có một chức năng nhiệm vụ riêng và chúng liên kết với nhau tạo thành hệ thống trong Axis2. Chương 4 đưa ra mô hình khung đàm phán chất lượng dịch vụ dịch vụ Web, các dịch vụ được triển khai trên Axis2, cài đặt thử nghiệm bằng ngôn ngữ Java và sử dụng các thư viện của Axis2. Phần cuối của luận văn là kết luận và hướng phát triển.
z 3 Chƣơng 1: TỔNG QUAN VỀ DỊCH VỤ WEB Chương này giới thiệu tổng quan về dịch vụ Web.1 trình bày khái niệm và đặc điểm của dịch vụ Web. Kiến trúc của dịch vụ Web được trình bày ở mục 1.2 và các đặc điểm quan trọng của dịch vụ Web như SOAP, WSDL, UDDI được trình bày ở mục 1.6 trình bày tổng quan về mô hình phân tầng trong dịch vụ, điều này giúp chúng ta hiểu được kiến trúc và các khả năng phát triển của dịch vụ Web.7 trình bày về các vấn đề xây dựng dịch vụ Web kết hợp.1 Giới thiệu về dịch vụ Web Có nhiều định nghĩa về dịch vụ Web, theo định nghĩa của [8] “Một dịch vụ Web là phần mềm mà làm cho bản thân nó luôn sẵn sàng trên Internet và sử dụng hệ thống thông điệp dựa các tiểu chuẩn XML. XML được sử dụng để mã hóa tất cả giao tiếp với dịch vụ Web. Ví dụ, một khách hàng gọi một dịch vụ Web bằng cách gửi thông điệp XML, sau đó chờ XML phản hồi tương ứng.
Bởi vì tất cả giao tiếp trên dịch vụ Web là XML nên các dịch vụ Web không gắn bất kỳ với hệ thống hệ điều hành hoặc ngôn ngữ lập trình nào. Các ứng dụng có thể giao tiếp với nhau mà không phục thuộc vào hệ điều hành và nền tảng của nhau. Dịch vụ Web cung cấp giao thức và các định dạng dữ liệu phổ biến như HTTP, XML, SOAP, REST, WSDL, JSON để cho phép các ứng dụng trao đổi với nhau thông qua dịch vụ Web. Dưới đây là một số đặc điểm chính của dịch vụ Web [6].
Dịch vụ Web có tính đồng bộ và bất đồng bộ. Tính đồng bộ hoặc bất đồng bộ được đề cập trong lời gọi của khách hàng khi muốn thực hiện một dịch vụ Web. Tính đồng bộ là khối khách hàng phải chờ cho các hoạt động trước nó phải hoàn thành trước khi nó muốn được thực hiện. Tính bất đồng bộ cho phép khách hàng gọi một dịch vụ sau đó thực hiện chức năng khác.
Tính không đồng bộ là yếu tố quan trọng để giúp hệ thống dịch vụ Web có mềm dẻo và linh hoạt hơn. Dịch vụ Web hỗ trợ các lời gọi từ xa (RPC). Dịch vụ Web cho phép khách hàng gọi các hàm, các thủ tục và phương thức trên đối tượng điều khiển từ xa thông qua giao thức dựa trên XML. Cả hai công nghệ Enterprise JavaBeans (EJBs) and .NET được phân phối và truy cập thông qua một loạt các cơ chế RPC.1 dưới đây mô tả mô hình JAX- RPC, JAX- RPC là thư viện phổ biến trên ngôn ngữ java hỗ trợ cho việc trao đổi thông điệp giữa người sử dụng dịch vụ (client) và nhà cung cấp dịch vụ Web (Web service).
z 4 Dịch vụ Web hỗ trợ cấu trúc dữ liệu dạng văn bản. XML được sử dụng để biểu diễn dữ liệu cho tất cả giao thức và thông điệp của dịch vụ Web. Nên dịch vụ Web có khả năng hỗ trợ cấu trúc dữ liệu dạng văn bản. Điều này cho phép dịch vụ Web biểu diễn các trúc dữ liệu từ đơn giản đến phức tạp và làm cho dịch vụ Web trở nên mềm dẻo và linh hoạt hơn trong trao đổi dữ liệu.
Mô hình JAXRPC [18] 1.2 Kiến trúc dịch vụ Web Có ba vai trò trong kiến trúc dịch vụ Web bao gồm: nhà cung cấp dịch vụ, nhà yêu cầu dịch vụ và đăng ký dịch vụ. Trong đó, nhà cung cấp dịch vụ có vai trò xây dựng dịch vụ Web và làm cho dịch vụ đó luôn ở trạng thái sẵn sàng được sử dụng. Nhà yêu cầu dịch vụ Web là đối tượng cần sử dụng dịch vụ Web, các đối tượng này sẽ gọi dịch vụ Web bằng cách gửi một thông điệp yêu cầu SOAP. Đăng ký dịch Web là một nơi tập trung chứa thông tin các dịch vụ, cho phép các nhà phát triển hoặc nhà cung cấp có thể xuất bản một dịch vụ Web mới hoặc tìm ra một dịch vụ đã tồn tại.
Trong dịch vụ Web có ba thành phần chính là SOAP, WSDL và UDDI.3 SOAP SOAP (Simple Object Access Protocol) cung cấp cơ chế đơn giản để trao đổi thông tin giữa các ứng dụng trong môi trường phân tán sử dụng XML. SOAP đưa ra các quy tắc để đặc tả các loại dữ liệu, các kiểu dữ liệu. Cụ thể nó cho phép đặc tả các kiểu dữ liệu như : String, Interger, Float, Enum, Array, Struct [14]. Dưới đây là các đặc điểm kỹ thuật của SOAP [7].
- SOAP được quy ước theo một định dạng, được đóng gói và được hướng dẫn định tuyến giống như dạng phong bì thư. Dạng phong bì thư có ý nghĩa cho mô tả nội dung của thông điệp. Cấu trúc thông điệp SOAP bao gồm hai thành phần chính là phần tiêu đề và phần thân và chúng được gói trong phần phong bì thư. - SOAP có một phương tiện vận chuyển hoặc một giao thức ràng buộc để cung cấp một cơ chế chung cho phép gửi một phong bì SOAP thông qua một giao thức ở mức thấp như HTTP.
- SOAP có quy tắc mã hóa cung cấp một quy ước biểu diễn các thẻ dựa trên XML. - SOAP có cơ chế gọi các thủ tục từ xa (Remote Procedure Call) kí hiệu là RPC, nghĩa là SOAP hỗ trợ các lời gọi hàm từ xa. Một trong những mục tiêu của SOAP là xây dựng cơ chế đóng gói thông điệp và thực hiện trao đổi thông qua các lời hỏi hàm từ xa. Sử dụng SOAP cho RPC không bị giới hạn giao thức nhưng thông thường hay sử dụng giao thức HTTP.
Một vấn đề đặt ra là, làm thế nào phân biệt cấu trúc dữ liệu XML và cấu trúc dữ liệu SOAP, khi nào dữ liệu XML trở thành SOAP. Giả sử chúng ta có cấu trúc dữ liệu về một đơn hàng dạng XML như ở ví dụ 1.1, cấu trúc dữ liệu này không phải là một tài liệu SOAP, nó chỉ đơn giản là một tài liệu XML. Các bước chuyển cấu trúc dữ liệu XML của ví dụ 1.1 thành một tài liệu SOAP theo những bước sau: gói dữ liệu XML ở vào bên trong một phần thân của SOAP. Gói phần thân của SOAP vào bên trong phòng bì thư SOAP.
Đưa tùy chọn vào phần tiêu đề của SOAP, khai báo không gian tên (namespace), mã hóa dữ liệu XML, thiết lập các ràng buộc trong SOAP. Khi đó, ta có cấu trúc dữ liệu một tài liệu SOAP như ở ví dụ 1.1: mô tả cấu trúc dữ liệu XML về thông tin một đơn hàng.0" encoding="UTF-8" standalone="no"?> <PurchaseOrder xmlsn="urn:xml-sample"> <shipTo country="VN"> <name>hoang xuan huy</name> z 6 <street>123 xuan thuy</street> <email>huyhx@gmail.com</email> <city>Ha Noi</city> <province>Ha Noi</province> <zip>1000</zip> </shipTo> <items> <item id="124"> <productName>Java Web Services </productName> <quantity>1</quantity> <price>25$</price> <comment>I want to buy this book</comment> </items> </PurchaseOrder> Ví dụ 1.2: Cấu trúc dữ liệu một tài liệu SOAP về thông tin một đơn hàng.0" encoding="UTF-8" standalone="no"?> <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://schemas.org/soap/envelop" xmlns:xsi="http://www.org/1999/XMLSchema-instance" xmlns:xsd="http://www.org/1999/XMLSchema"> <SOAP-ENV:Header>. </SOAP-ENV:Header> <SOAP-ENV:Body> <PurchaseOrder xmlsn="urn:xml-sample"> <shipTo country="VN"> <name>hoang xuan huy</name> <street>123 xuan thuy</street> <email>huyhx@gmail.com</email> <city>Ha Noi</city> <province>Ha Noi</province> <zip>1000</zip> </shipTo> <items> z 7 <item id="124"> <productName>Java Web Services </productName> <quantity>1</quantity> <price>25$</price> <comment>I want to buy this book</comment> </items> </PurchaseOrder> </SOAP-ENV:Body> </SOAP-ENV:Envelop> 1.4 WSDL Ngôn ngữ miêu tả dịch vụ Web (Web Services Description Language) được viết tắt là WSDL. WSDL là một định dạng XML, WSDL định nghĩa các cú pháp XML để miêu tả trừu trượng các thành phần của một dịch vụ Web.
Theo [7] WSDL được chia làm hai phần. Phần mô tả trừu tƣợng Phần này chỉ cung cấp thông tin về đặc điểm giao diện của dịch vụ Web mà không có bất kỳ sự mô tả hoặc các thông tin liên quan đến công nghệ sử dụng để cài đặt dịch vụ Web. Điều này làm cho dịch vụ Web không phải thay đổi phần mô tả khi nền tảng công nghệ triển khai dịch vụ Web bị thay đổi. Phần mô tả trừu tượng của WSDL bao gồm các phần tử types, message và portType.
Phần tử types định nghĩa các kiểu dữ liệu liên quan đến các thông điệp nhận và thông điệp gửi của dịch vụ Web. Phần tử types sử dụng định nghĩa lược đồ XML (XML schema definitions) viết tắt XSD để mô tả các kiểu dữ liệu cho phần tử types.3 mô tả cấu trúc phần tử types trong một WSDL.3: Cấu trúc phần tử types trong một WSDL. <types> <schema targetNamespace="http://example.xsd" xmlns="http://www.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> z 8 </complexType> </element> <element name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types> Phần tử message để biểu diễn trừu tượng cấu trúc của thông điệp. Thông điệp là phương tiện để trao đổi giữa bên yêu cầu dịch vụ và bên cung cấp dịch vụ.
Một thông điệp bao gồm một hoặc nhiều phần tử part. Một phần tử part miêu tả một phần dữ liệu và kiểu dữ liệu của thông điệp.4 mô tả cấu trúc 2 thông điệp có tên là GetLastTradePriceInput, GetLastTradePriceOutput. Thông điệp GetLastTradePriceInput chứa phần tử có tên là body và kiểu dữ liệu TradePriceRequest, kiểu này được mô tả ở ví dụ 1. Thông điệp GetLastTradePriceOutput cũng chứa phần tử có tên là body và kiểu dữ liệu TradePrice, kiểu này cũng được mô tả ở ví dụ 1.4: ví dụ mô tả cấu trúc phần tử message trong WSDL.
<message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePrice"/> </message> Phần tử portType để biểu diễn trừu tượng tập các hoạt động hỗ trợ cho một điểm đầu cuối của dịch vụ Web.5 mô tả hoạt động GetLastTradePrice với tham số đầu vào là GetLastTradePriceInput và tham số đầu ra là GetLastTradePriceOutput.5: Cấu trúc phần portType trong WSDL <portType name="StockQuotePortType"> z 9 <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> Phần mô tả cụ thể. Phần này bao gồm các phần tử binding, port và service.