intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Thiết kế và phát triển các dịch vụ Web JAX-WS 2.0

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:37

136
lượt xem
15
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Rajeev Hathi, Nhà tư vấn, IBM Naveen Balani, Tác giả Tóm tắt: Việc sử dụng công nghệ Java™ API dùng cho các dịch vụ Web XML (JAX-WS) để thiết kế và phát triển các dịch vụ Web thu được nhiều lợi ích, gồm cả việc đơn giản hoá việc xây dựng các dịch vụ Web và máy khách dịch vụ Web trong Java, dễ dàng phát triển và triển khai các dịch vụ Web, và tăng tốc độ phát triển các dịch vụ Web. Hướng dẫn này dẫn dắt bạn qua các cách làm mọi thứ và nhiều...

Chủ đề:
Lưu

Nội dung Text: Thiết kế và phát triển các dịch vụ Web JAX-WS 2.0

  1. Thiết kế và phát triển các dịch vụ Web JAX-WS 2.0 Rajeev Hathi, Nhà tư vấn, IBM Naveen Balani, Tác giả Tóm tắt: Việc sử dụng công nghệ Java™ API dùng cho các dịch vụ Web XML (JAX-WS) để thiết kế và phát triển các dịch vụ Web thu được nhiều lợi ích, gồm cả việc đơn giản hoá việc xây dựng các dịch vụ Web và máy khách dịch vụ Web trong Java, dễ dàng phát triển và triển khai các dịch vụ Web, và tăng tốc độ phát triển các dịch vụ Web. Hướng dẫn này dẫn dắt bạn qua các cách làm mọi thứ và nhiều hơn nữa bằng cách phát triển một ứng dụng mẫu xử lý đơn hàng (sample order-processing application), bộc lộ ra chức năng của nó như các dịch vụ Web. Sau khi xong hướng dẫn này, bạn sẽ có khả năng áp dụng các khái niệm và kiến thức vừa được tiếp thu để phát triển các dịch vụ Web cho ứng dụng của bạn bằng cách sử dụng công nghệ JAX-WS. Trước khi bạn bắt đầu Về hướng dẫn này Trong hướng dẫn này, bạn thiết kế và phát triển một ứng dụng xử lý đơn hàng, thể hiện ra chức năng của nó như là các dịch vụ Web, nhờ đó những người tiêu dùng khác nhau có thể đặt mua thông tin theo một cách thức độc lập (nền tảng). Mục tiêu Sau khi đi hết hướng dẫn này, bạn có thể áp dụng các khái niệm và kiến thức để phát triển dịch vụ Web cho ứng dụng của bạn bằng cách sử dụng công nghệ JAX - WS.
  2. Các điều kiện tiên quyết Để hoàn tất thành công hướng dẫn này, bạn phải có một sự hiểu biết cơ bản về công nghệ dịch vụ Web và có một mức độ thành thạo trong việc lập trình Java. Các yêu cầu về hệ thống Các nội dung liên quan: Các gợi ý và các lời khuyên các dịch vụ Web: JAX-RPC sơ với loạt JAX-  WS. Các API của máy khách JAX-WS trong gói tính năng các dịch vụ Web của  WebSphere Application Server V6.1 (Máy chủ ứng dụng WebSphere V6.1). Các dịch vụ Web nhanh trên trình diễn theo yêu cầu.  Cung cấp các dịch vụ Web cho các ứng dụng di động.  Để chạy các thí dụ trong hướng dẫn này, bạn cần cài đặt Java Platform, Bản chuẩn (Java SE) 6.0. Mục lục Mục lục Trước khi bạn bắt đầu  Giới thiệu về JAX-WS 
  3. Phát triển một dịch vụ Web  Công bố dịch vụ  Tạo các máy khách dịch vụ Web  Chạy máy khách dịch vụ Web  Tóm tắt 
  4. Giới thiệu về JAX-WS Lí do dùng JAX-WS JAX-WS là một công nghệ được thiết kế để đơn giản hóa việc xây dựng các dịch vụ Web và máy khách dịch vụ Web trong Java. Nó cung cấp một bó dịch vụ Web đầy đủ làm nhẹ bớt nhiệm vụ phát triển và triển khai dịch vụ Web. JAX -WS hỗ trợ trình WS-I Basic Profile 1.1, đảm bảo phát triển dịch vụ Web thông qua sử dụng bó JAX-WS có thể được tiêu thụ bởi bất kỳ khách hàng nào được phát triển trong bất kỳ ngôn ngữ lập trình tuân thủ WS-I Basic Profile 1.1. JAX-WS, gồm cả Kiến trúc Java dùng cho XML Binding (JAXB) và SOAP với Các gắn kết API (Attachments API) dùng cho Java (SAAJ). JAXB có khả năng liên kết số liệu bằng cách cung cấp cách thuận lợi để ánh xạ một lược đồ XML sang thể hiện trong mã Java. JAXB bảo vệ sự chuyển đổi các thông báo lược đồ XML trong các thông báo SOAP thành mã Java mà bạn không cần phải hiểu biết đầy đủ về việc phân tích cú pháp XML và SOAP. Đặc tả JAXB định nghĩa sự liên kết giữa Java và các lược đồ XML. SAAJ cung cấp cách xử lý chuẩn về các gắn kết XML chứa trong một thông báo SOAP. Hơn nữa, JAX-WS làm tăng tốc độ phát triển dịch vụ Web thông qua việc cung cấp một thư viện các chú giải để chuyển các lớp đối tượng Java cũ đơn giản (plain old Java object) (POJO) thành các dịch vụ Web. Nó cũng quy định một sự ánh xạ chi tiết từ một dịch vụ được định nghĩa trong Ngôn ngữ Miêu tả Các dịch vụ Web (WSDL) đến các lớp Java thực hiện dịch vụ đó. Bất kì những kiểu phức tạp được định nghĩa trong WSDL cũng đều được ánh xạ thành các lớp Java theo sau việc ánh xạ được định nghĩa bởi đặc tả JAXB. JAX -WS trước đây được đóng gói với Java Platform, Bản Doanh nghiệp (Java EE 5). Đặc tả JAX-WS 2.0 được phát triển dưới JSR 224 của Quy trình Cộng đồng Java (Java Community Process) (JCP).
  5. Phát triển một dịch vụ Web Tiếp cận kết giao trước tiên (contract-first approach) so với tiếp cận mã trước tiên (code-first approach) Một cách hay để khởi đầu vào JAX-WS là phát triển trước tiên một dịch vụ Web. Bạn có thể phát triển một dịch vụ Web bằng cách sử dụng một trong hai tiếp cận: Theo mục đích: Bắt đầu bằng một kết giao WSDL, và tạo một lớp Java để  thực hiện dịch vụ. Theo mã: Bắt đầu bằng một lớp Java, và sử dụng các chú giải để tạo cả tệp  WSDL và giao diện Java. Tiếp cận WSDL theo mục đích đòi hỏi một sự hiểu biết tốt về WSDL và XSD (Định nghĩa lược đồ XML) để định nghĩa các định dạng thông điệp. Nó là một ý tưởng tốt để bắt đầu bằng tiếp cận theo mã nếu bạn chưa quen nhiều với các dịch vụ Web, là cái mà bạn sẽ sử dụng trong hướng dẫn này để phát triển các dịch vụ Web. Phát triển các dịch vụ Web theo mã Khi sử dụng tiếp cận theo mã, bạn bắt đầu bằng một lớp hoặc các lớp Java, chúng thực hiện các đặc tính mà bạn muốn thể hiện ra như là các dịch vụ. Tiếp cận theo mã đặc biệt hữu ích khi các bổ sung Java đã sẵn sàng và bạn cần phải thể hiện các bổ sung này như là các dịch vụ. Phát triển một dịch vụ Web xử lý đơn hàng Chúng ta hãy bắt đầu bằng cách tạo một dịch vụ Web xử lý đơn hàng, chấp nhận thông tin đặt mua hàng, vận chuyển thông tin, và các mục hàng được đặt mua, và cuối cùng là tạo một mã xác nhận (confirmation ID) như là một phản hồi. Bộ mã
  6. dùng vào dịch vụ xử lý đơn hàng có trong Liệt kê 1. Đây là một cài đặt giả, in ra định danh khách hàng (customer ID) và số lượng các mục hàng tại bàn điều khiển, sau đó trả về một mã đặt hàng giả của A1234. (Bạn có thể tải về mã nguồn để có ứng dụng đầy đủ trong mục Tải về của bài này.) Giải nén mã nguồn vào ổ C của bạn, nơi có thư mục JAXWS-Tutorial được tạo. Thư mục này chứa mã nguồn, như hiển thị trong Liệt kê 1. Liệt kê 1. Cài đặt dịch vụ Web xử lý đơn hàng package com.ibm.jaxws.tutorial.service; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import com.ibm.jaxws.tutorial.service.bean.OrderBean; //JWS annotation that specifies that the portType name of the //Web service is "OrderProcessPort," the service name
  7. //is "OrderProcess," and the targetNamespace used in the generated //WSDL is "http://jawxs.ibm.tutorial/jaxws/orderprocess." @WebService(serviceName = "OrderProcess", portName = "OrderProcessPort", targetNamespace = "http://jawxs.ibm.tutorial/jaxws/orderprocess") //JWS annotation that specifies the mapping of the service onto the // SOAP message protocol. In particular, it specifies that the SOAP messages //are document literal. @SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding. Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED) public class OrderProcessService { @WebMethod public OrderBean processOrder(OrderBean orderBean) { // Do processing...
  8. System.out.println("processOrder called for customer" + orderBean.getCustomer().getCustomerId()); // Items ordered are if (orderBean.getOrderItems() != null) { System.out.println("Number of items is " + orderBean.getOrderItems().length); } //Process order. //Set the order ID. orderBean.setOrderId("A1234"); return orderBean; } }
  9. OrderBean giữ lại thông tin đặt mua hàng như trình bày trong Liệt kê 2. Cụ thể, nó chứa các tham chiếu đến khách hàng, các mục hàng đặt mua, và đối tượng địa chỉ chuyển hàng. Liệt kê 2. Lớp OrderBean giữ lại thông tin đặt mua hàng package com.ibm.jaxws.tutorial.service.bean; public class OrderBean { private Customer customer; private Address shippingAddress; private OrderItem[] orderItems;
  10. private String orderId; public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId;
  11. } public Address getShippingAddress() { return shippingAddress; } public void setShippingAddress(Address shippingAddress) { this.shippingAddress = shippingAddress; } public OrderItem[] getOrderItems() { return orderItems; } public void setOrderItems(OrderItem[] orderItems) {
  12. this.orderItems = orderItems; } } Điểm xuất phát để phát triển một dịch vụ Web JAX-WS là một lớp Java được chú thích bằng chú giải javax.jws.WebService. Các chú giải JAX-WS được sử dụng là một bộ phận của các dịch vụ Web Metadata cho đặc tả Java Platform (JSR -181). Như bạn hẳn để ý đến, OrderProcessService được chú thích bằng chú giải WebService, định nghĩa lớp như một điểm cuối dịch vụ Web. Lớp OrderProcessService (đây là lớp có chú giải @javax.jws.WebService ) định nghĩa ngầm định một giao diện điểm cuối dịch vụ (SEI), khai báo các ph ương thức mà một khách hàng có thể gọi ra trên dịch vụ. Mọi phương thức công cộng được định nghĩa trong lớp này, nếu các phương thức không được chú thích bằng một chú giải @WebMethod với phần tử loại trừ đặt ở true (đúng), được ánh xạ thành các phép toán WSDL. Chú giải @WebMethod là tuỳ ý và được dùng để tuỳ chỉnh phép toán dịch vụ Web. Ngoài phần tử loại trừ, chú giải javax.jws.WebMethod còn cung cấp tên của phép toán và các phần tử hoạt động, được sử dụng để tuỳ chỉnh thuộc tính tên của phép toán và phần tử hoạt động SOAP trong một tài liệu WSDL. Thuộc tính này là tuỳ chọn; nếu chưa được định nghĩa, các giá trị mặc định được lấy từ tên lớp.
  13. Sau khi dịch vụ Web được thực hiện, bạn cần tạo bất kỳ tạo tác nào cần có để triển khai dịch vụ, sau đó gói dịch vụ Web như một tạo tác được triển khai — thường là một tệp WAR — và triển khai tệp WAR vào bất kỳ máy chủ tương thích nào có hỗ trợ đặc tả JAX-WS 2.0. Các tạo tác điển hình được tạo là các lớp đảm bảo chuyển đổi các đối tượng Java thành XML, và tệp WSDL và lược đồ XSD dựa trên giao diện dịch vụ. Nhằm mục đích thử nghiệm, Java 6 bao gói kết hợp một máy chủ Web hạng nhẹ vào cái mà dịch vụ Web có thể được công bố ra bằng cách gọi một cuộc gọi API đơn giản. Tiếp theo bạn hãy quan sát cách thử nghiệm các dịch vụ Web của bạn bằng cách sử dụng tiếp cận này.
  14. Công bố dịch vụ Tạo các tạo tác JAX-WS Bạn tạo các tạo tác JAX-WS khả chuyển cho dịch vụ Web xử lý đơn hàng bằng cách chạy công cụ wsgen. Công cụ này đọc một lớp SEI Web và tạo tất cả tạo tác yêu cầu cho các triển khai và đòi hỏi dịch vụ Web. Công cụ wsgen tạo tệp WSDL và lược đồ XSD cho các dịch vụ Web, những thứ cần được công bố. Để tạo các tạo tác JAX-WS, đầu tiên bạn cần phải biên dịch dịch vụ và các nguồn bean: 1. Mở một lệnh nhắc, và chuyển đến c:\JAXWS - JAXWS-Tutorial. 2. Chạy lệnh sau để biên dịch các tệp Java và đặt các tệp lớp vào các thư mục tương ứng của chúng: javac com\ibm\jaxws\tutorial\service\*.java com\ibm\jaxws\tutorial\service\bean\*.java 3. Chạy lệnh sau đây để tạo các tạo tác JAX-WS: wsgen -cp . com.ibm.jaxws.tutorial.service.OrderProcessService -wsdl Công cụ wsgen cung cấp nhiều tuỳ chọn, như tạo các tạo tác WSDL và lược đồ cho dịch vụ bằng cách cung cấp tuỳ chọn -wsdl. Sau khi chạy lệnh này, bạn sẽ thấy OrderProcess.wsdl và OrderProcess_schema1.xsd được tạo trong thư mục JAXWS-Tutorial, và các tạo tác JAX-WS được tạo trong thư mục com\ibm\jaxws\tutorial\service\jaxws. Sau khi các tạo tác được tạo, bạn công bố dịch vụ Web xử lý đơn hàng bằng cách chạy máy khách công bố các dịch vụ Web sau đây.
  15. 4. Biên dịch OrderWebServicePublisher bằng cách chạy lệnh sau đây từ thư mục c:\JAXWS- Tutorial: javac com\ibm\jaxws\tutorial\service\publish\OrderWebServicePublisher.java 5. Sau đó chạy lệnh sau đây: java com.ibm.jaxws.tutorial.service.publish.OrderWebServicePublisher Sau khi chạy chương trình Java, bạn sẽ nhìn thấy thông báo sau: Dịch vụ Web được công bố tại http://localhost:8080/OrderProcessWeb/orderprocess. Để ngừng chạy các dịch vụ Web, chấm dứt quy trình Java này. Việc này công bố dịch vụ Web đơn hàng tại địa chỉ http://localhost:8080/OrderProcessWeb/orderprocess. B ạn có thể xác minh liệu dịch vụ Web đó đang chạy bằng cách cho hiển thị WSDL được tạo bởi dịch vụ Web xử lý đơn hàng: 6. Mở trình duyệt, và chuyển đến http://localhost:8080/OrderProcessWeb/orderprocess?wsdl. Phân tích OrderWebServicePublisher Trước khi phân tích các tạo tác WSDL và lược đồ, chúng ta hãy phân tích mã dùng cho OrderWebServicePublisher. Liệt kê 3 cung cấp mã nguồn của máy khách OrderWebServicePublisher.
  16. Liệt kê 3. Mã dùng để công bố dịch vụ Web xử lý đơn hàng package com.ibm.jaxws.tutorial.service.publish; import javax.xml.ws.Endpoint; import com.ibm.jaxws.tutorial.service.OrderProcessService; public class OrderWebServicePublisher { public static void main(String[] args) { Endpoint.publish("http://localhost:8080/OrderProcessWeb/orderprocess", new OrderProcessService());
  17. } } Phương thức Endpoint.publish() cung cấp một cách thuận lợi để công bố và việc thử nghiệm các dịch vụ Web JAX-WS. publish() lấy hai tham số: địa chỉ của dịch vụ Web và lớp cài đặt dịch vụ Web JAX-WS. Các phương thức publish() tạo một máy chủ Web hạng nhẹ tại URL được xác định (trong trường hợp này, nó là chủ cục bộ và cổng 8080) và triển khai dịch vụ Web đến địa chỉ đó. Máy chủ Web hạng nhẹ đang chạy trong máy ảo Java (JVM) và có thể kết thúc bằng cách gọi ra phương thức endpoint.stop() có điều kiện hoặc kết thúc máy khách OrderWebServicePublisher. Phân tích WSDL được tạo Để quan sát WSDL dịch vụ Web xử lý đơn hàng được tạo, gõ nhập địa chỉ URL sau đây trong trình duyệt: http://localhost:8080/OrderProcessWeb/orderprocess?wsdl . Chúng ta hãy phân tích một số khía cạnh WSDL quan trọng và xem xét cách đã tạo ra các tạo phẩm lược đồ và WSDL dựa trên siêu dữ liệu JAX-WS, bắt đầu bằng việc phân tích XSD được tạo ra. Người ta nhập XSD này vào một tệp WSDL
  18. khi sử dụng các thẻ xsd:import (xem Liệt kê 4); schemaLocation chỉ rõ địa chỉ của XSD. Liệt kê 4. Tệp WSDL chứa lược đồ xử lý đơn hàng định nghĩa Đặt schemaLocation (http://localhost:8080/OrderProcessWeb/orderprocess?xsd=1) vào trình duy ệt để xem các định nghĩa lược đồ trả về trình duyệt. Chúng ta hãy phân tích điều gì đang xảy ra ở đây: định nghĩa lược đồ bắt đầu bằng targetNamspace và một khai báo tns, ánh xạ đến targetNamespace, http://jawxs.ibm.tutorial/jaxws/orderprocess, mà
  19. bạn đã định nghĩa trong chú giải @WebService cho OrderProcessService. Liệt kê 5 cung cấp mã này. Liệt kê 5. Khai báo không gian tên lược đồ Công cụ wsgen thực hiện trước đó tạo hai lớp bean bao vỏ (wrapper bean), ProcessOrder và ProcessOrderResponse giữ lại các thông báo đầu vào và đầu ra đối với dịch vụ Web xử lý đơn hàng. Dựa trên các lớp bean bao vỏ, các phần tử lược đồ sau đây được tạo: processOrder là của kiểu processOrder, nó đại diện một kiểu phức tạp chứa  một phần tử mang tên arg0 và kiểu orderBean. Bạn có thể thấy một ánh xạ một-một giữa lớp ProcessOrder và kiểu phức tạp processOrder. processOrderResponse tương tự như kiểu processOrderResponse các định  nghĩa của chúng ánh xạ sang lớp ProcessOrderResponse.
  20. Chúng ta hãy quan sát nó kỹ hơn trong Liệt kê 6. Liệt kê 6. Khai báo lược đồ đối với processOrder Định nghĩa kiểu orderBean được minh hoạ trong Liệt kê 7 ánh xạ sang lớp OrderBean. Định nghĩa kiểu orderBean gồm có: Một phần tử customer có kiểu là customer.  Một orderId có kiểu là string. 
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2