Xây dựng các dịch vụ web với an ninh ở mức chuyển tải bằng cách sử dụng Rational Application Developer V7, Phần 1: : Xây dựng dịch vụ web và dịch vụ web phía khách

Bạn hãy xây dựng dịch vụ web an toàn với bảo đảm an ninh ở mức chuyển tải bằng cách sử dụng IBM® Rational® Application Developer V7 và IBM WebSphere® Application Server V6.1. Hãy học theo loạt bài gồm ba phần này để nhận được các chỉ dẫn từng bước về cách thức phát triển các dịch vụ web và trình khách, định cấu hình xác thực cơ sở HTTP và định cấu hình HTTP trên SSL (HTTPS). Phần một của loạt bài hướng dẫn này sẽ hướng dẫn cho bạn cách xây dựng một dịch vụ web cho một ứng dụng máy tính cầm tay đơn giản. Bạn tạo ra và kiểm thử hai kiểu trình dịch vụ web cho máy khách khác nhau: trình khách Java™ Platform, Enterprise Edition (Java EE) và trình khách Java độc lập. Bạn cũng xử lý các trường hợp ngoại lệ do người dùng định nghĩa trong các dịch vụ web.

Henry Cui, Kỹ sư phần mềm, IBM

Henry Cui làm việc cho nhóm dịch vụ và hỗ trợ Rational Application Developer tại phòng thí nghiệm của IBM tại Toronto. Ông là chuyên gia về các vấn đề chủ thể (subject) của nhóm hỗ trợ trong lĩnh vực dịch vụ web, nơi ông đã giúp nhiều khách hàng giải quyết các vấn đề về thiết kế, phát triển, và các vấn đề di trú của các dịch vụ web. Henry là đồng tác giả của cuốn sách được ưu chuộng "Hướng dẫn lập trình Rational Application Developer V7", một trong những cuốn sách đỏ của IBM



28 08 2009

Trước khi bạn bắt đầu

Về loạt bài hướng dẫn này

Trong phần đầu của loạt bài hướng dẫn, bạn:

  • Thiết lập các máy chủ.
  • Tạo một bean Java.
  • Tạo các dịch vụ web.
  • Tạo một trình khách Java EE của dịch vụ web.
  • Tạo một trình khách Java độc lập của dịch vụ web.

Sau khi các nền móng cơ sở đã được sắp đặt, phần 2 của loạt bài hướng dẫn này chỉ cho bạn cách cấu hình xác thực cơ sở HTTP. Cụ thể, bạn:

  • Kích hoạt bảo đảm an ninh của WebSphere Application Server của IBM.
  • Định cấu hình xác thực cơ sở HTTP cho bên cung cấp dịch vụ web.
  • Định cấu hình xác thực cơ sở HTTP cho trình khách dịch vụ web bằng cách sử dụng một bộ mô tả triển khai.
  • Định cấu hình xác thực cơ sở HTTP cho trình khách dịch vụ web bằng cách lập trình.
  • Giám sát các thông tin về xác thực cơ sở HTTP bằng cách sử dụng trình giám sát TCP/IP.

Phần 3 của hướng dẫn này cho bạn biết cách để định cấu hình cho HTTPS. Trong Phần 3, bạn:

  • Tạo kho lưu trữ các khóa, kho ủy thác (trust) và chứng thực các bên cung cấp dịch vụ web.
  • Tạo cấu hình của SSL (Secure Sockets Layer) cho bên cung cấp dịch vụ web.
  • Tạo một dây chuyền vận chuyển của thùng chứa web mới để sử dụng cấu hình SSL mới cho bên cung cấp dịch vụ web.
  • Định cấu hình cho HTTPS cho trình khách dịch vụ Web
  • Kiểm thử dịch vụ Web qua HTTPS từ trình khách Java EE.
  • Kiểm thử dịch vụ Web qua HTTPS từ trình khách Java độc lập.

Mục tiêu

Tìm hiểu cách tạo ra và kiểm thử hai kiểu trình khách dịch vụ web: trình khách Java EE và trình khách Java độc lập. Thực hành cách xử lý các trường hợp ngoại lệ do người dùng định nghĩa trong các dịch vụ web.

Một số yêu cầu

Bạn cần phải có một số hiểu biết cơ sở về công nghệ Java và các dịch vụ web để làm theo hướng dẫn này.

Yêu cầu về hệ thống

Bạn cần phải cài đặt sản phẩm Rational Application Developer V7 của IBM, bản mới nhất. (Bạn có thể tải về bản Rational Application Developer dùng thử tại trang developerWorks nếu bạn chưa mua sản phẩm này). Nếu bạn không chắc rằng bản Rational Application Developer V7 của mình là bản mới nhất, bạn có thể vào trình quản lý cài đặt IBM (IBM Installation Manager) và chọn mục Update Packages để xem phần cập nhật mới nếu đã có. Vào thời điểm tôi viết hướng dẫn này, phiên bản mới nhất của Rational Application Developer là 7.0.0.5.

Lưu ý: Cứ khoảng ba tháng một lần IBM phát hành một gói vá lỗi. Bạn có thể thấy một phiên bản mới hơn của Rational Application Developer tại thời điểm cài đặt. Mỗi phiên bản mới của Rational Application Developer có chứa số lượng lớn các phần đã sửa chữa. Chúng tôi khuyên bạn nên cài đặt các phiên bản mới nhất để tránh gặp các vấn đề đã được sửa chữa.


Giới thiệu về an ninh ở mức chuyển tải

Bảo đảm an ninh dịch vụ web có thể được thực hiện ở hai mức: an ninh ở mức chuyển tảian ninh ở mức thông điệp. Ta hãy xem xét chúng kỹ hơn:

  • Bảo đảm an ninh ở mức chuyển tải: Bảo đảm an ninh ở mức chuyển tải là cơ chế an ninh điểm-đến-điểm, có thể được sử dụng cho việc nhận dạng và xác thực các bên, tính toàn vẹn của thông điệp và tính bảo mật. HTTP, giao thức truyền thông Internet được sử dụng nhiều nhất, hiện tại cũng là giao thức phổ biến nhất cho các dịch vụ web. HTTP là một giao thức vốn đã không an toàn, vì tất cả các thông tin được gửi đi dưới dạng văn bản rõ giữa các bên đồng đẳng (peer) không được xác thực trên một mạng lưới không an toàn. Với việc bảo đảm an ninh ở mức chuyển tải, kết nối giữa trình khách và các máy chủ ứng dụng thường được bảo đảm an toàn bằng SSL, ở đây các trình khách và máy chủ xác thực nhân dạng của nhau và giao tiếp với nhau bằng thông điệp được mã hóa. Với việc bảo đảm an ninh ở mức chuyển tải, toàn bộ thông tin liên lạc được mã hóa.
  • Bảo đảm an ninh ở mức thông điệp: Bảo đảm an ninh ở mức thông điệp là cách tiếp cận mà ở đây tất cả các thông tin liên quan đến an ninh đều được bao gói kín trong thông điệp SOAP. Bảo đảm an ninh ở mức thông điệp đòi hỏi sự bảo vệ bằng thẻ bài tên người dùng, mật mã XML và chữ ký số. Đặc tả bảo đảm an ninh dịch vụ Web (WS-Security) cung cấp an ninh ở mức thông điệp. Bảo đảm an ninh ở mức thông điệp thường được áp dụng kết hợp với bảo đảm an ninh ở mức truyền tải.

Hướng dẫn này chỉ cho bạn cách bảo đảm an ninh các dịch vụ web ở mức truyền tải bằng cách sử dụng hai kỹ thuật: HTTPS và xác thực cơ sở HTTP.

HTTPS

HTTPS cho phép việc xác thực phía khách và phía chủ thông qua các chứng thực. SSL là một giao thức truyền thông tin của bạn trên Internet dưới dạng đã mã hóa. Nó đảm bảo rằng các thông tin được gửi đi và không thay đổi và rằng các thông tin đó chỉ được gửi đến máy chủ mà bạn muốn. Bạn có thể áp dụng các dịch vụ web HTTPS cho mọi kiểu trình khách, bao gồm cả trình khách Java EE và trình khách Java độc lập.

HTTPS với chứng thực phía máy chủ là cấu hình phổ biến nhất trên Web hiện nay. Trong cấu hình này, máy chủ phải xuất trình chứng thực cho trình khách để trình khách xác định nhân dạng của máy chủ. Trình khách không phải xuất trình chứng thực của nó với máy chủ để máy chủ để xác định nhân dạng của trình khách. Nói cách khác, trình khách có thể xác thực được máy chủ, nhưng máy chủ không thể xác thực được trình khách. Tuy nhiên, bạn cũng có thể sử dụng HTTPS cùng với xác thực cơ sở, điều này cho phép máy chủ xác thực được trình khách.

Xác thực cơ sở HTTP

Cách đơn giản để cung cấp các dữ liệu xác thực cho trình khách dịch vụ Web là xác thực tới điểm cuối dịch vụ (service endpoint) được bảo vệ bằng xác thực cơ sở HTTP. Thông tin xác thực cơ sở nằm tại phần tiêu đề (header) của HTTP, tiêu đề này mang các yêu cầu SOAP. Khi máy chủ ứng dụng nhận được yêu cầu HTTP, thì tên người sử dụng và mật khẩu được lấy ra và được kiểm tra xác minh bằng cách sử dụng cơ chế xác thực riêng của máy chủ. Để ngăn không cho người khác đọc trực tiếp tên người sử dụng và mật khẩu, tên và mật khẩu được mã hóa thành một chuỗi các ký tự cơ số - 64 (base-64) trước khi truyền.

Xác thực cơ sở HTTP khác với hỗ trợ xác thực cơ sở do đặc tả bảo đảm an ninh dịch vụ Web (WS-Security) cung cấp. Các thông tin của xác thực cơ sở do WS-Security cung cấp nằm tại tiêu đề của SOAP, trong khi thông tin của xác thực cơ sở HTTP nằm trong tiêu đề của HTTP.

Xác thực cơ sở có một điểm yếu về an ninh: Nó gửi giấy ủy nhiệm bằng cách dùng bộ mã ký tự cơ số 64 (base-64 encoding), rất dễ bị giải mã. Việc gửi giấy ủy nhiệm bằng cách dùng bộ mã ký tự cơ số 64 là không an toàn gần giống như gửi chúng bằng văn bản rõ. Ta nên gửi dữ liệu trên HTTPS.

Sự kết hợp của xác thực cơ sở HTTP với HTTPS ngày nay được sử dụng rộng rãi trong ngành công nghiệp vì nó giải quyết được các lĩnh vực an ninh sau:

  • Xác thực: Trình khách dịch vụ Web tự xác thực mình với dịch vụ bằng cách gửi đi tên người dùng và mật khẩu mã hóa bằng bộ ký tự cơ số 64 trong tiêu đề cấp quyền HTTP. Dịch vụ web tự xác thực mình với trình khách bằng cách xuất trình chứng thực của nó cho trình khách.
  • Cấp quyền: Sau khi trình khách được xác thực thành công bằng cách sử dụng xác thực cơ sở HTTP, nhân dạng của người sử dụng được kết hợp vào yêu cầu. Dựa vào nhân dạng của người dùng, quyết định cấp quyền được thực hiện. Điều này được máy chủ Java EE thực hiện dựa trên mô hình an ninh Java EE để chỉ cho phép các truy cập được cấp quyền tới các phương thức servlets và JavaServer Pages (JSPS) và Enterprise JavaBeans (EJBs).
  • Bảo mật: HTTPS cung cấp khả năng mật mã hóa, đảm bảo rằng bên thứ ba không thể giải mã được dữ liệu khi nó được truyền qua lại giữa máy khách và máy chủ trên mạng. Các thông tin xác thực cơ sở HTTP cũng được mã hóa bởi SSL.
  • Tính toàn vẹn: HTTPS đảm bảo dữ liệu không bị sửa đổi khi nó được truyền qua lại giữa máy khách và máy chủ trên mạng.

Thiết lập các máy chủ

Trong hướng dẫn này bạn sử dụng hai cá thể WebSphere Application Server: Máy chủ thứ nhất phục vụ dịch vụ Web, máy chủ thứ hai phục vụ trình khách dịch vụ Web. Lý do bạn tạo hai máy chủ phục vụ dịch vụ web và trình khách một cách riêng rẽ là bạn muốn cung cấp một hình ảnh rõ ràng về các cấu hình SSL cho dịch vụ Web và trình khách mà bạn sẽ làm việc tại phần 3 của loạt bài hướng dẫn này.

Trong máy chủ WebSphere Application Server phiên bản V6 hoặc các phiên bản mới hơn, các thông tin về môi trường chạy thi hành được tạo ra trong một lược tả. Nếu bạn muốn tạo ra một cấu hình của máy chủ mới, bạn phải tạo một lược tả mới. Rational Application Developer cho phép bạn đồng thời chạy nhiều cấu hình máy chủ và môi trường kiểm thử trên cùng một nút phát triển.

Theo mặc định, bản cài đặt Rational Application Developer tạo ra một máy chủ WebSphere Application Server, nó sử dụng lược tả AppSrv01. Bạn sử dụng công cụ quản lý lược tả để tạo ra một lược tả mới, và sau đó tạo ra máy chủ thứ hai để trỏ đến lược tả mới.

Thiết lập máy chủ cho các nhà cung cấp dịch vụ web

  1. Khởi chạy Rational Application Developer.
  2. Khi hộp thoại Workspace launcher hiện ra, bạn nhập đường dẫn phân biệt đầy đủ tới vị trí của vùng làm việc như hình 1: C:\workspace\WebService.
    Hình 1. Hộp thoại Workspace launcher
    Hộp thoại Workspace Launcher
  3. Khi trang Welcome mở ra, bạn đóng nó lại. Bây giờ bạn đang ở trong phối cảnh J2EE.
  4. Nhấn vào phiếu Servers ở ô phía dưới.
  5. Sẽ xuất hiện mục WebSphere Application Server V6.1, như trong hình 2. Máy chủ này được tạo ra bởi bản cài đặt mặc định của Rational Application Developer.
    Hình 2. Khung nhìn Các máy chủ
    Hộp thoại Workspace Launcher
  6. Nhấn đúp chuột vào mục WebSphere Application Server v6.1 để mở trình biên tập máy chủ.
  7. Tại phần General, đổi tên máy chủ từ WebSphere Application Server v6.1 thành WAS v6.1 for Web service provider.
  8. Ghi lưu và đóng trình biên tập máy chủ lại.

Tạo máy chủ cho người tiêu dùng dịch vụ web

  1. Để tạo một lược tả máy chủ WebSphere Application Server V6.1 mới bằng cách sử dụng công cụ quản lý lược tả của WebSphere, tại bàn làm việc bạn chọn Window > Preferences.
  2. Tại cửa sổ Preferences, bạn mở rộng Server > WebSphere.
  3. Ở dưới danh sách quản lý lược tả các máy chủ cục bộ WebSphere v6.0 và v6.1, bạn chọn WebSphere Application Server v6.1. Trong lược tả của máy chủ WebSphere được định nghĩa trong danh sách các máy chủ đang chạy thi hành được chọn phía trên, bạn sẽ thấy tệp tin AppSrv01 trong danh sách, như tại hình 3. Tệp tin AppSrv01 được máy chủ WebSphere Application Server V6.1 sử dụng cho các bên cung cấp dịch vụ web mà bạn vừa cài đặt.
    Hình 3. Công cụ tạo lược tả của WebSphere
    Công cụ tạo lược tả WebSphere
  4. Nhấn nút Create bên cạnh lược tả của WebSphere được định nghĩa trong danh sách các máy chủ đang chạy thi hành được chọn phía trên, danh sách này liệt kê tất cả các lược tả đã định nghĩa cho môi trường chạy thi hành đang được chọn.
  5. Tại trang chào mừng bạn đến với công cụ quản lý khái lược (Welcome to the Profile Management Tool) nhấn Next.
  6. Tại trang lựa chọn môi trường (Environment selection) nhấn Next.
  7. Tại trang các tùy chọn tạo khái lược (Profile Creation Options), chọn tạo khái lược tiêu biểu Typical profile creation, và nhấn Next.
  8. Tại trang quản trị an ninh (Administrative Security) bỏ chọn mục Enable administrative security, và nhấn Next.
  9. Tại trang tổng kết tạo lược thảo (Profile Creation Summary), hãy xem lại các thiết đặt lược thảo. Bạn thấy rằng các cổng được tăng thêm một dành cho các lược thảo mới mà bạn đã tạo để các lược thảo mới không xung đột với lược thảo hiện có.
  10. Nhấn Create.
  11. Tại trang hoàn tất tạo lược thảo (Profile Creation Complete) bỏ chọn mục Launch the First steps console, sau đó nhấn vào Finish. Quay lại trang Preferences, bạn có thể thấy lược thảo mới với tên là AppSrv02, được liệt kê trong các lược thảo của WebSphere, định nghĩa trong danh sách các môi trường chạy thi hành được chọn ở trên.
  12. Nhấn chuột phải vào khung nhìn các máy chủ và chọn New > Server.
  13. Tại hộp thoại định nghĩa một máy chủ mới (Define a New Server) bạn chọn WebSphere v6.1 Server, và nhấn vào Next.
  14. Tại hộp thoại các thiết lập máy chủ WebSphere (WebSphere Server Settings), bạn chọn tệp tin AppSrv02 làm tên lược thảo của WebSphere. Đối với các trường còn lại giữ nguyên giá trị mặc định và nhấn vào nút Finish.
  15. Máy chủ được tạo ra và được hiển thị trong khung nhìn máy chủ với tên là WebSphere v6.1 @ localhost.
  16. Nhấn đúp chuột vào WebSphere v6.1 @ localhost để mở trình biên tập máy chủ.
  17. Tại mục General, bạn đổi tên máy chủ từ WebSphere v6.1 @ localhost thành WAS v6.1 for Web service consumer.
  18. Ghi lưu và đóng trình biên tập máy chủ lại. Bây giờ bạn có hai máy chủ trong khung nhìn máy chủ, như trong hình 4.
    Hình 4. Danh sách các máy chủ
    Danh sách máy chủ

Phần 4. Tạo một Java bean

Bây giờ bạn tạo một ứng dụng máy tính cầm tay để thực hiện các phép toán số học đơn giản, chẳng hạn như cộng, trừ, nhân, chia. Nếu mẫu số của phép chia là 0, thì phương thức sẽ bẫy lỗi ArithmeticException (ngoại lệ số học) và đưa ra một DivideByZeroException, (ngoại lệ chia cho số 0), đây là một ngoại lệ do người dùng định nghĩa. Điều này buộc trình khách dịch vụ Web phải xử lý ngoại lệ “chia cho số không”.

Thiết lập máy chủ cho bên cung cấp dịch vụ web

  1. Chọn File > New > Project > Dynamic Web Project, và nhập tên Calculator làm tên của dự án, như hình 5.

    Hình 5. Tạo một dự án Web động
    Tạo dự án Web động
  2. Nhấn Finish. Nếu bạn được yêu cầu chuyển sang Phối cảnh Web, bạn hãy nhấn No. và vẫn dùng lại ở Phối cảnh J2EE
  3. Tại khung nhìn Project Explorer, nhấn chuột phải vào dự án Calculator và chọn New > Class.
  4. Nhập com.ibm làm tên của gói và Calculator làm tên của lớp Java như trong hình 6.
  5. Nhấn Finish.
    Hình 6. Tạo một lớp Java mới
    Tạo một lớp Java mới
  6. Sao chép tệp Calculator.java từ liệt kê 1 và dán nó vào trình soạn thảo Java.
  7. Ghi lưu tệp tin này.
    Liệt kê 1. Tệp tin Calculator.java
    package com.ibm;
    
    public class Calculator {
    	public Calculator() {
    	}
    
    	public int add(int i, int j) {
    		return i + j;
    	}
    
    	public int subtract(int i, int j) {
    		return i - j;
    	}
    
    	public int multiply(int i, int j) {
    		return i * j;
    	}
    
    	/*
    	 * In Java, the result of the integer division is always an integer, with
    	 * the remainder discarded.
    	 */
    	public int divide(int a, int b) throws DivideByZeroException {
    		try {
    			return a / b;
    		} catch (ArithmeticException e) {
    			throw new DivideByZeroException();
    		}
    	}
    }

    Bạn sẽ thấy một số lỗi biên dịch, bởi vì bạn chưa tạo tệp DivideByZeroException.java.

  8. Tại khung nhìn Package Explorer, nhấn chuột phải vào gói com.ibm > New > Class.
  9. Nhập DivideByZeroException tên lớp, sau đó nhấn Finish.
  10. Sao chép tệp DivideByZeroException.java từ liệt kê 2 vào trình biên tập Java và ghi lưu các tệp tin.
    Liệt kê 2. Tệp tin DivideByZeroException.java
    package com.ibm;
    
    public class DivideByZeroException extends Exception {
    	public DivideByZeroException() {
    		super();
    	}
    }

    Các lỗi biên dịch sẽ mất đi.


Tạo các dịch vụ web

Tạo các dịch vụ web bằng cách sử dụng trình thủ thuật các dịch vụ web

Bây giờ bạn có thể sử dụng các trình thủ thuật dịch vụ web để trưng ra ứng dụng máy tính hiện có như một dịch vụ web. Điều này được gọi là phương pháp tiếp cận từ dưới lên (bottom-up) trong đó một dịch vụ web được tạo ra dựa vào logic nghiệp vụ hiện có trong các Java beans hoặc EJBs.

  1. Tại khung nhìn các máy chủ nhấn chuột phải vào WAS v6.1 for Web services provider và chọn Start. Ta có thể mất vài phút để khởi chạy máy chủ.
  2. Tại khung nhìn Package Explorer, nhấn chuột phải vào lớp Calculator và chọn Web Services > Create Web service, như ở hình 7.
    Hình 7. Trình thủ thuật dịch vụ web
    Thủ thuật dịch vụ Web
  3. Nhấn vào siêu liên kết Server: WebSphere v6.1 Server để hiển thị hộp thoại Service Deployment Configuration.
  4. Mở rộng thư mục Existing Servers.
  5. Chọn WAS v6.1 for Web service provider làm máy chủ và IBM WebSphere JAX-RPC làm môi trường chạy thi hành của các dịch vụ Web như ở hình 8.
  6. Nhấn OK.
    Hình 8. Chọn máy chủ dịch vụ web và môi trường chạy thi hành
    Chọn máy chủ dịch vụ web và môi trường chạy thi hành
  7. Nhấn Next.
  8. Tại hộp thoại Service Endpoint Interface Selection, chấp nhận các cài đặt mặc định và nhấn Next.
  9. Tại hộp thoại Web Service Java Bean Identity chấp nhận các tùy chọn mặc định và nhấn Next.
  10. Nhấn Finish.

Kiểm thử các dịch vụ web bằng cách sử dụng Web Services Explorer

Một cách nhanh chóng để kiểm thử các dịch vụ web là sử dụng Web Services Explorer, một ứng dụng Web JSP được chạy trên máy servlet của Apache Tomcat có sẵn trong Eclipse. Web Services Explorer sử dụng ngôn ngữ WSDL để biểu hiện một yêu cầu SOAP. Tham số trả về được loại bỏ và các giá trị được hiển thị trong một khuôn dạng đã xác định từ trước. Quá trình này không dính líu đến việc tuần tự hóa và phi tuần tự hóa dữ liệu (data marshalling and unmarshalling).

Để kiểm thử các dịch vụ Web:

  1. Tại cửa sổ Project Explorer, mở rộng thư mục JSR-109 Web ServicesServices.
  2. Nhấn chuột phải vào CalculatorService và chọn Test with Web Services Explorer như ở hình 9.
    Hình 9. Khởi động trình Web Services Explorer
    Khởi động trình Web Services Explorer
  3. Khi trình Web Services Explorer mở ra, bạn chọn một trong các phương thức (ví dụ: add).
  4. Ô Actions ở bên phải sẽ hiển thị một giao diện đơn giản, cho phép bạn nhập các giá trị cho các tham số của phương thức. Nhập giá trị cho các tham số i và j, sau đó nhấn Go.
  5. Kết quả của việc gọi các dịch vụ web xuất hiện trong ô Status ở phía dưới bên phải của khung nhìn Web Services Explorer như ở hình 10.
    Hình 10. Kiểm thử với Web Services Explorer
    Kiểm thử với Web Services Explorer
  6. Nhấn đúp vào thanh Status để mở rộng nó.
  7. Nhấn vào Source để xem các thông điệp SOAP, là tệp XML thô, như ở hình 11.
    Hình 11. Yêu cầu về SOAP và đáp ứng
    Yêu cầu về SOAP và đáp ứng
  8. Đóng cửa sổ Web Services Explorer lại.

Tạo trình khách Java EE của dịch vụ web

Rational Application Developer cho phép bạn tạo ra một trình khách dịch vụ Web như là một trình khách Java EE (hoặc như là một trang Web, EJB, hoặc ứng dụng phía khách) và như là một trình khách Java độc lập. Trong phần này, bạn sinh ra một trình khách dịch vụ Web là một ứng dụng Web.

Tạo một trình khách dịch vụ Web trong một dự án Web

Bạn có thể sử dụng thủ thuật tạo ra trình khách dịch vụ web để tạo ra các tạo phẩm của trình khách dịch vụ Web, chẳng hạn như các ủy nhiệm (proxy) của dịch web, trình xác định địa điểm dịch vụ, giao diện dịch vụ hoặc chính trình khách. Thủ thuật cũng tạo ra một mẫu ứng dụng web để trình bày cách gọi các proxy của dịch vụ Web.

  1. Tại khung nhìn Servers, nhấn chuột phải vào WAS v6.1 for Web services consumer và chọn Start. Ta mất vài phút để khởi động máy chủ.
  2. Tại khung nhìn Project Explorer, mở rộng thư mục JSR-109 Web ServicesServices.
  3. Nhấn chuột phải vào CalculatorService và chọn Generate Client.
  4. Nhấn vào siêu liên kết Server: WebSphere v6.1 Server để hiển thị hộp thoại Service Deployment Configuration.
  5. Mở rộng thư mục Existing Servers rồi chọn WAS v6.1 for Web services consumer làm máy chủ và IBM WebSphere JAX-RPC làm môi trường đang chạy thi hành của dịch vụ Web như ở hình 12.
  6. Nhấn OK.
    Hình 12. Cấu hình môi trường khách
    Cấu hình môi trường khách
  7. Nhấn vào siêu liên kết Client project: Calculator để làm xuất hiện hộp thoại Specify Client Project Settings.
  8. Nhập CalculatorWebClient làm tên dự án trình khách. Chọn mục Dynamic Web Project làm loại dự án trình khách và CalculatorWebClientEAR làm tên dự án EAR phía khách như tại hình 13.
  9. Nhấn OK.
    Hình 13. Xác định các thông số thiết lập dự án trình khách
    Xác định các thông số thiết lập dự án trình khách
  10. Tại hộp thoại Web Service Client, di chuyển thanh trượt đến vị trí Test như ở hình 14. Thao tác này cung cấp các tùy chọn để kiểm thử dịch vụ bằng cách sử dụng một ứng dụng mẫu dựa trên JSP.
  11. Nhấn Next.
    Hình 14. Hộp thoại Web Service Client
    Hộp thoại Web Service Client
  12. Tại hộp thoại Web Service Proxy Page, chấp nhận mặc định (không có bảo đảm an ninh) và nhấn Next.
  13. Tại hộp thoại Web Service Client Test, chấp nhận mặc định (không có bảo đảm an ninh) và nhấn Finish. Trình khách JSP mẫu xuất hiện.
  14. Kiểm tra các phương thức cộng, trừ, nhânchia để đảm bảo các dịch vụ web đang làm việc, như tại hình 15.
    Hình 15. Trình khách kiểm thử dịch vụ Web
    Trình khách kiểm thử dịch vụ Web
  15. Nhấn divide. Nhập giá trị 2 vào trường a và giá trị 0 vào trường b.
  16. Nhấn Invoke. Bạn sẽ thấy kết quả sau:

    exception: com.ibm.DivideByZeroException

    Trình khách JSP chỉ nhằm mục đích trình diễn, nó không xử lý các trường hợp ngoại lệ. Bạn cần phải viết mã tùy chỉnh để xử lý các trường hợp ngoại lệ.

Xử lý các trường hợp ngoại lệ trong các dịch vụ web

Khi các dịch vụ web đưa ra một ngoại lệ cho thấy rằng lỗi đã xảy ra, máy (engine) dịch vụ web của WebSphere chuyển đổi lỗi ngoại lệ thành lỗi SOAP và trả về lỗi này trong đáp ứng SOAP. Ở phía khách, máy dịch vụ web của WebSphere chuyển đổi các lỗi SOAP thành lỗi ngoại lệ của Java.

Nếu như khách nhập số 0 vào mẫu số của phép chia, thì dịch vụ web đưa ra lỗi DivideByZeroException, đây là một lỗi ngoại lệ do người dùng định nghĩa. Ở phía khách, dịch vụ web đã được tạo ra truyền đạt lỗi ngoại lệ đó tới trình khách để trình khách có thể bẫy (catch) được ngoại lệ do người dùng định nghĩa và hiển thị một thông điệp thân thiện với người dùng tại trang JSP.

Để viết mã tùy chỉnh xử lý một ngoại lệ do người sử dụng định nghĩa, bạn hãy theo các bước sau:

  1. Tại khung nhìn Package Explorer, mở rộng CalculatorWebClient, chọn WebContent > sampleCalculatorProxy, và mở tệp Result.jsp.
  2. Kiểm tra mã. Bạn có thể thấy rằng proxy của dịch vụ web (com.ibm.CalculatorProxy) được gọi ra từ tệp JSP này.
  3. Nhấn vào phiếu Source và thêm dòng lệnh sau ở phía trên cùng của tệp Result.jsp:

    <%@page import="com.ibm.DivideByZeroException"%>

  4. Tìm hai dòng lệnh sau:

    int divide39mtemp = sampleCalculatorProxyid.divide(a_8idTemp,b_9idTemp);
    String tempResultreturnp40 = org.eclipse.jst.ws.util.JspUtils.markup(String.valueOf(divide39mtemp));

    và thay thế chúng bằng các đoạn mã trong liệt kê 4.
    Liệt kê 4. Thêm mã xử lý ngoại lệ
    String tempResultreturnp40;
    try {
    int divide39mtemp = sampleCalculatorProxyid.divide(a_8idTemp, b_9idTemp);
    tempResultreturnp40 = 
    org.eclipse.jst.ws.util.JspUtils.markup(String.valueOf(divide39mtemp));
    } catch (DivideByZeroException e) {
    		tempResultreturnp40 = "Can't divide by zero!";
    }
  5. Ghi lưu tệp tin. Bạn sẽ thấy một hoạt động xuất bản ở phía dưới bên phải của bàn làm việc. Nếu bạn thực hiện bất kỳ thay đổi nào đối với tệp JSP và ghi lưu các tệp tin trong khi các máy chủ đang chạy, bạn có thể chờ đợi việc xuất bản tự động diễn ra để các thay đổi được phản ánh trên máy chủ. Bạn không cần phải khởi động lại máy chủ.
  6. Sau khi việc xuất bản được hoàn tất, bạn hãy kiểm thử phương thức chia divide() một lần nữa. Nhập giá trị 2 vào trường a và giá trị 0 vào trường b.
  7. Nhấn Invoke. Bạn sẽ thấy một thông báo thân thiện với người dùng hiển thị:
    Can't divide by zero! (Không thể chia cho số không!)

Tạo một trình khách Java độc lập của dịch vụ web

Máy chủ WebSphere Application Server V6.1 cung cấp việc triển khai phía khách không quản lý, dựa vào các API của Java cho đặc tả RPC dựa trên XML (JAX-RPC) 1.1. Ứng dụng khách mỏng (Thin Client) cho Jax-rpc với máy chủ WebSphere Application Server là một môi trường khách Java độc lập và không quản lý cho phép bạn chạy các ứng dụng khách JAX-RPC của dịch vụ web để gọi các dịch vụ web được chứa trên máy chủ ứng dụng. Tệp tin jar của ứng dụng khách mỏng cho JAX-RPC tên là com.ibm.ws.webservices.thinclient_6.1.0.jar, nằm tại thư mục %RAD installation root%\runtimes\base_v61\runtimes

  1. Tại khung nhìn Project Explorer, mở rộng mục JSR-109 Web Services folderServices. Nhấn chuột phải vào CalculatorService và chọn Generate Client.
  2. Nhấn vào siêu liên kết Client project: Calculator để hiển thị hộp thoại Specify Client Project Settings.
  3. Nhập CalculatorJavaClient làm tên của dự án trình khách và chọn Java Utility Project làm kiểu dự án trình khách (xem Hình 16).
  4. Nhấn OK. Trình khách dịch vụ Web được tạo ra trong dự án Java.
    Hình 16. Khung nhìn Specify client project settings.
    Khung nhìn Specify client project settings
  5. Nhấn Next.
  6. Tại trang Web Service Proxy, nhấn Finish.

Bây giờ bạn tạo một lớp Java để gọi proxy của dịch vụ web đã được tạo ra:

  1. Tại khung nhìn Package Explorer, mở rộng dự án CalculatorJavaClient và chọn src.
  2. Nhấn chuột phải vào gói com.ibm và chọn New > Class.
  3. Nhập TestCalculator làm tên lớp, nhấn chọn public static void main(String[] args) sau đó nhấn Finish.
  4. Sao chép mã từ liệt kê 5 và dán nó vào trình soạn thảo Java.
    Liệt kê 5. Tệp tinTestCalculator.java
    package com.ibm;
    
    import java.rmi.RemoteException;
    
    public class TestCalculator {
    	public static void main(String[] args) {
    		try {
    			CalculatorProxy proxy = new CalculatorProxy();
    			System.out.println("2 + 2 = " + proxy.add(2, 2));
    			System.out.println("2 - 2 = " + proxy.subtract(2, 2));
    			System.out.println("4 * 2 = " + proxy.multiply(4, 2));
    			System.out.println("4 / 2 = " + proxy.divide(4, 2));
    			System.out.print("4 / 0 = ");
    			System.out.print(proxy.divide(4, 0));
    		} catch (DivideByZeroException e) {
    			System.out.println("Error: can't divide by zero!");
    		} catch (RemoteException e) {
    			e.printStackTrace();
    		}
    	}
    }
  5. Nhấn chuột phải vào dự án CalculatorJavaClient và chọn Properties.
  6. Nhấn vào Java Build Path, sau đó nhấn vào phiếu Libraries.
  7. Chọn mục WebSphere Application Server v6.1 [WebSphere Application Server v6.1] sau đó nhấn Remove, vì rằng trình khách Java độc lập không có quyền truy cập vào tất cả các thư viện thời gian chạy thi hành của WebSphere.
  8. Nhấn Add External JARs, và thêm tệp com.ibm.ws.webservices.thinclient_6.1.0.jar, nằm tại thư mục %RAD installation root%\runtimes\base_v61\runtimes. Đường dẫn xây dựng Java giống như hình 17.
  9. Nhấn OK.
    Hình 17. Đường dẫn xây dựng dự án Java
    Đường dẫn xây dựng dự án Java
  10. Tại khung nhìn Package Explorer, mở rộng dự án CalculatorJavaClient, và chọn src > com.ibm.
  11. Mở tệp CalculatorProxy.java, và tìm dòng lệnh sau:
    private boolean _useJNDI = true;
  12. Thay đổi giá trị của _useJNDI thành false, vì trình khách Java độc lập chạy bên ngoài thùng chứa Java EE và không thể sử dụng Java Naming and Directory Interface (JNDI):
    private boolean _useJNDI = false;
  13. Nhấn chuột phải vào tệp TestCalculator.java, và chọn Run As > Java Application. Kết quả xuất ra màn hình trông như sau:
    12-Nov-2007 10:31:10 PM com.ibm.ws.ssl.config.SSLConfigManager
    INFO: ssl.disable.url.hostname.verification.CWPKI0027I
    2 + 2 = 4
    2 - 2 = 0
    4 * 2 = 8
    4 / 2 = 2
    4 / 0 = Error: can't divide by zero!

Giỏi lắm! Bạn đã hoàn tất việc tạo ra các dịch vụ web và trình khách dịch vụ web bằng cách sử dụng sản phẩm Rational Application Developer.


Kết luận

Rational Application Developer đơn giản hoá và tự động hóa rất nhiều quá trình xây dựng các ứng dụng dịch vụ web hoạt động liên hợp, tuân thủ tiêu chuẩn WS-I, và nâng cao năng suất. Trong phần này của loạt bài hướng dẫn, bạn đã học cách tạo, triển khai và kiểm thử các ứng dụng dịch vụ web bằng cách sử dụng Rational Application Developer V7 và máy chủ WebSphere Application Server V6.1. Phần 2 của loạt bài hướng dẫn này cung cấp các chỉ dẫn từng bước để định cấu hình xác thực cơ sở HTTP.


Tải về

Mô tảTênKích thước
Solution in project interchange format1Part1Solution.zip58KB

Ghi chú

  1. Để nhập khẩu các giải pháp, bạn chọn File > Import > Other > Project Interchange.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=SOA và dịch vụ Web, Rational
ArticleID=424074
ArticleTitle=Xây dựng các dịch vụ web với an ninh ở mức chuyển tải bằng cách sử dụng Rational Application Developer V7, Phần 1: : Xây dựng dịch vụ web và dịch vụ web phía khách
publish-date=08282009