IT Research Department @BKAP 2015 Page 1 / 12Lab 03 - 04 Web Service Endpoints Designing Web Service Clients Mục tiêu - Xây dựng web service thanh toán - Xây dựng Client test các dịch
Trang 1IT Research Department @BKAP 2015 Page 1 / 12
Lab 03 - 04 Web Service Endpoints Designing Web Service Clients
Mục tiêu
- Xây dựng web service thanh toán
- Xây dựng Client test các dịch vụ
Phần I Bài tập step by step
Bài 1
Cho cơ sở dữ liệu thanh toán ngân hàng BankDB
AccountBank
Trang 2 Merchant
TransactionBank
Xây dựng các dịch vụ:
CheckOrder: Kiểm tra tính chính xác của tài khoản, số dư khả dụng của tk khách hàng
FinishOrder: Thực hiện thanh toán cho khách hàng, trừ số tiền tài khoản khách hàng và
cộng vào tài khoản được thanh toán
Xây dựng client thực hiện test các dịch vụ
Trang 3IT Research Department @BKAP 2015 Page 3 / 12
Step 1: Xây dựng các procedure thực hiện nghiệp vụ của các dịch vụ
USE [BankDB]
GO
============================================
Author: Quangnd
Create date: 20161109
Description: Dich vu CheckOrder
=============================================
CREATE PROCEDURE [dbo].[CheckOrder]
@merchantName nvarchar(50),
@accNo nvarchar(30),
@accountName nvarchar(50),
@paymentAmount float,
@returncode char(2) OUTPUT,
@transactionId int OUTPUT
AS
BEGIN
Kiem tra tat ca dieu kien xem co thanh toan duoc hay khong
Declare @checkMerchant int;
Declare @merchantId int;
Declare @accountid int;
Select @checkMerchant = count(*) from Merchant m where m.MerchantName = @merchantName and
m.Status = 1;
If @checkMerchant > 0
BEGIN
lay merchantid tu @merchantName truyen vao Select @merchantId = m.MerchantId from Merchant m;
Declare @checkAcc int;
Kiem tra tai khoan co ton tai hay khong Select @checkAcc = count(*) from AccountBank a where a.AccName = @accountName and a.AccNo =
@accNo and a.Status = 1;
if @checkAcc>0 BEGIN Tai khoan ton tai > Kiem tra so du kha dung cua tai khoan co du thanh toan hay khong Lay ma tai khoan
Select @accountid = a.AccountId from AccountBank a;
Kiem tra so du kha dung Declare @checkAvailableBalance int;
Select @checkAvailableBalance = count(*) from AccountBank a where a.AccountId =
@accountid and a.AvailableBalance>@paymentAmount;
if @checkAvailableBalance>0 set @returncode = '00';
else set @returncode = '03';
END else set @returncode = '02';
END
else
Set @returncode = '01';
Neu dieu kien thoa man, tao ban ghi trong transaction
if @returncode = '00'
Trang 4BEGIN
Insert into TransactionBank values(@merchantId,@accountid,@paymentAmount,GETDATE(),N'Thanh toán cho trang web rau sạch',0);
Commit;
Declare @maxTrans int;
Select @maxTrans = max(.TransachtionId) from TransactionBank t;
Set @transactionId = @maxTrans;
END
else
Set @transactionId = 0;
END
FinishOrder
USE [BankDB]
GO
=============================================
Author: Quangnd
Create date: 20161109
Description: Dich vu FinishOrder
=============================================
CREATE PROCEDURE [dbo].[FinishOrder]
@transactionId int,
@merchantName nvarchar(50),
@returnCode char(2) OUTPUT
AS
BEGIN
Kiem tra co transaction khong
Declare @checkTransaction int;
Declare @accountIdKH int;
Declare @accountIdWeb int;
lay tai khoan cua trang web
Select @accountIdWeb = m.AccountId from Merchant m where m.MerchantName = @merchantName;
Declare @paymentAmount float;
Select @checkTransaction = count(*) from TransactionBank t where t.TransachtionId = @transactionId;
if @checkTransaction>0
BEGIN
Select @paymentAmount = t.BalancePayment from TransactionBank t where t.TransachtionId =
@transactionId;
Select @accountIdKH = t.AccountId from TransactionBank t where t.TransachtionId = @transactionId; Kiem tra lai so du kha dung
Declare @checkSDKD int;
Select @checkSDKD = count(*) from AccountBank a where a.AccountId = @accountIdKH and a.AvailableBalance>@paymentAmount;
if @checkSDKD>0 BEGIN Cong vao so du tk Web Declare @amountWeb float;
Declare @updateWeb float;
Select @amountWeb = a.AvailableBalance from AccountBank a where a.AccountId =
@accountIdWeb;
Trang 5IT Research Department @BKAP 2015 Page 5 / 12
Set @updateWeb = @amountWeb + @paymentAmount;
Update AccountBank Set AvailableBalance = @updateWeb Where AccountId = @accountIdWeb;
Tru vao so du tk KH Declare @amountKH float;
Declare @updateKH float;
Select @amountKH = a.AvailableBalance from AccountBank a where a.AccountId =
@accountIdKH;
Set @updateKH = @amountKH - @paymentAmount;
Update AccountBank Set AvailableBalance = @updateKH Where AccountId = @accountIdKH;
Cap nhat trang thai cua Transaction Update TransactionBank
Set Status = 1 Where TransachtionId = @transactionId;
Tra ve returncode Set @returnCode = '00' END
Else So du khong du de thanh toan set @returnCode = '02';
END
Else
Khong ton tai transaction
set @returnCode = '01';
END
Step 2: Tạo Web Application
File New Project Java Web Web Application
Project Name: PaymentApp
Server: GlassFish Server
Step 3: Tạo lớp java ConnectionDB.java để kết nối cơ sở dữ liệu
PaymentApp New Other Java Java Class
Class Name: ConnectionDB
Package: util
ConnectionDB.java
Trang 6package util;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Quang
*/
public class ConnectionDB {
private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=BankDB";
private static final String DB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String user_db = "sa";
private static final String pass_db = "Gacon1984";
public static Connection openConnection() {
Connection conn = null;
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException ex) {
Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
}
try {
conn = DriverManager.getConnection(URL, user_db, pass_db);
} catch (SQLException ex) {
Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
}
return conn;
}
public static void closeConnection(Connection conn, CallableStatement callableSt) {
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
if (callableSt != null) {
try {
callableSt.close();
} catch (SQLException ex) {
Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Step 4: Tạo Web Service PaymentWebService
PaymentApp New Other Web Services Web Service
Trang 7IT Research Department @BKAP 2015 Page 7 / 12
Web Service Name: PaymentWebService
Package: ws
Chọn Create Web Service from Scratch
Tạo các dịch vụ cho PaymentWebService
CheckOrder
FinishOrder
PaymentWebService.java
package ws;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import javax.jws.WebService;
import javax.jws.WebMethod;
import util.ConnectionDB;
/**
*
* @author Quang
*/
@WebService(serviceName = "PaymentWebservice")
public class PaymentWebservice {
/**
* Web service operation
*
* @param merchantName
* @param accNo
* @param accName
* @param paymentAmount
* @return
*/
@WebMethod(operationName = "checkOrder")
public String checkOrder(String merchantName, String accNo, String accName, float paymentAmount) {
Connection conn = null;
String returnSt = "";
CallableStatement callableSt = null;
try {
conn = ConnectionDB.openConnection();
callableSt = conn.prepareCall("{call CheckOrder(?,?,?,?,?,?)}");
callableSt.setString(1, merchantName);
callableSt.setString(2, accNo);
callableSt.setString(3, accName);
callableSt.setFloat(4, paymentAmount);
Trang 8callableSt.registerOutParameter(5, Types.CHAR);
callableSt.registerOutParameter(6, Types.INTEGER);
callableSt.execute();
String returnCode = callableSt.getString(5);
int transactionId = callableSt.getInt(6);
returnSt = returnCode + "#" + transactionId;
} catch (Exception e) {
e.printStackTrace();
}
return returnSt;
}
public String finishOrder(int transactionid, String merchantName) {
Connection conn = null;
String returnSt = "";
CallableStatement callableSt = null;
try {
conn = ConnectionDB.openConnection();
callableSt = conn.prepareCall("{call FinishOrder(?,?,?)}");
callableSt.setInt(1, transactionid);
callableSt.setString(2, merchantName);
callableSt.registerOutParameter(3, Types.CHAR);
callableSt.execute();
returnSt = callableSt.getString(3);
} catch (Exception e) {
e.printStackTrace();
}
return returnSt;
}
}
Ứng dụng sau khi hoàn thành
Step 5: Build, Deploy and Test Web Service
Trang 9IT Research Department @BKAP 2015 Page 9 / 12
Chuẩn bị dữ liệu Test
Test Web Service
Trang 11IT Research Department @BKAP 2015 Page 11 / 12
Trang 12Phần II Bài Tập Tự Làm
Bài 2: Xây dựng ứng dụng thực hiện thanh toán chuyển khoản để test các dịch vụ của web service trong bài 1 đã xây dựng