Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
1,02 MB
Nội dung
LậptrìnhvớiXMLchoDB2,Phần4:Tíchhợpdữliệutừ
các nguồndữliệukhácnhautrongứngdụngDB2dựa
trên webcủabạn
Giới thiệu
Bài viết này cung cấp một ví dụtrình điều khiển SOAP choDB2 có thể được sử dụng để ngầm
chạy thi hành thủ tục lưu sẵn củaDB2 bằng cách sử dụngcác API SOAP mà không cần phải tạo
ra bất kỳ ánh xạ tường minh nào. Tôi tin rằng cáctrình điều khiển cơ sở dữliệu thế hệ tiếp theo
sẽ dịch chuyển việc kết nối cơ sở dữliệutừcác API mức thấp như ODBC/JDBC sang các API
mức cao như SOAP và REST, dẫn đến việc cơ sở dữliệu đóng vai trò trực tiếp trong thế giới
SOA.
Để chỉ làm nổi bật những khía cạnh quan trọngcủa kiến trúc liên quan đến các mô hình dữliệu
XML, luồng xử lý được cố tình giữ ở mức đơn giản. Các giao diện đồ họa người dùng cũng được
giữ ở mức tối thiểu cần thiết để hiển thị các chức năng.
Các lược đồ XMLcủa Liên minh du lịch mở được sử dụng để tạo ra dữliệu khách sạn mẫu cũng
như cuộc gọi SOAP để tìm kiếm khách sạn. API PayPal được sử dụng để thực hiện các giao dịch
bằng thẻ tín dụngtừ máy chủ ứng dụng.
Mã nguồn đi kèm với bài viết này có thể tải về và được biên dịch. Bạn cần cài đặt DB2 9 vớicác
tệp tin jar XML và JCC DB2trong đường dẫn lớp cho Tomcat của bạn. Nếu bạn muốn kiểm thử
các giao dịch bằng thẻ tín dụng, thì bạn phải cài đặt các API Java của PayPal và có các tệp tin jar
ấy trong đường dẫn lớp cho Tomcat của bạn. Bạn cũng phải tạo một tài khoản tronghộp cát
(sandbox) của PayPal và nhận được các ủy quyền cho API của bạn, được nêu chi tiết trong Trung
tâm tíchhợp PayPal. Sau đó bạn có thể sửa đổi các thông tin ủy quyền trong hàm setupPaypal()
trong tệp tin article4.java.
Về đầu trang
Kịch bản
Kịch bản là một khách hàng đặt phòng khách sạn qua web. Trước tiên ông ta đăng nhập vào để
lấy ra hồ sơ của mình. Sau đó, ông xác định thành phố để lấy danh sách các khách sạn có sẵn và
mức giá phòng củacác khách sạn đó. Cuối cùng, ông chọn một khách sạn và đặt một phòng.
Hình 1. Kiến trúc mức tính năng
Các hành động của khách hàng trong máy khách dẫn đến kết quả là các cuộc gọi REST được
thực hiện từtrình duyệt web đến máy chủ ứng dụng. Đến lượt mình máy chủ ứngdụng có thể:
Trực tiếp kết nối đến cơ sở dữliệu nội bộ bằng cách sử dụng JDBC để lấy hồ sơ của
khách hàng.
Thực hiện cuộc gọi SOAP tới cơ sở dữliệukhác bên trong tường lửa của doanh nghiệp,
nhưng ở sau tường lửa nội bộ củacác bộ phận đặt phòng.
Thực hiện cuộc gọi REST đến nhà cung cấp dịch vụ giao dịch bằng thẻ tín dụng bên
ngoài như PayPal.
Hình 2. Kiến trúc mức thiết kế
Về đầu trang
Chi tiết
Để hiểu được những gì xảy ra đằng sau hậu trường khi khách hàng đi qua từng bước của quá
trình đặt phòng, bạn hãy nhìn vào luồng thông tin và đoạn mã lệnh làm cho quá trình này có thể
thực hiện được.
Bước 1
Khách hàng nhập tên của mình vào trang webcủa đại lý du lịch và nhận hồ sơ của mình. Để đơn
giản, không yêu cầu mật khẩu và giả sử rằng hồ sơ của khách hàng đã tồn tạitrong cơ sở dữliệu
của các đại lý.
Hình 3. Luồng lệnh và dữliệu để đăng nhập và lấy hồ sơ
Hồ sơ khách hàng, là một tàiliệu XML, được lưu trữ trong cơ sở dữliệutrong một cột XML.
Các thông tin về thẻ tín dụng cũng là một tàiliệu XML, nhưng nó được mật mã hóa và lưu trữ
trong định dạng nhị phân nhằm mục đích an ninh.
Liệt kê 1. Tạo bảng khách hàng và chèn bản ghi
CREATE TABLE CUSTOMERS (CUSTID CHARACTER (64) NOT NULL,
CC VARCHAR(1024) for bit data not null, INFO XML NOT NULL )
insert into CUSTOMERS values('hardeep',
encrypt('<CC type="visa" expirydate="12/2009" number="4721930402892796"
cvv="808">
<name>hardeep singh</name></CC>' , 'password'),
'<Customer customerid="hardeep" firstname="hardeep" lastname="singh"/>');
Hình 4. Đăng nhập
Khi nút Login được nhấn, hàm Javascript getCustomerInfo() được gọi trongtrình khách. Hàm
này tạo cuộc gọi REST cần thiết để thực hiện các dịch vụ customerinfo trong máy chủ ứng dụng.
Liệt kê 2. Trình khách gọi để lấy hồ sơ người sử dụng
var cid=document.getElementById("userid").value;
var addr=servletpath+"?cmd=customerinfo&msg="+cid;
var xmlhttpObj= new XMLHttpRequest();
xmlhttpObj.open('GET', addr, true);
xmlhttpObj.onreadystatechange = function() {
getCustomerInfoCallback(xmlhttpObj); };
xmlhttpObj.send("");
Máy chủ ứngdụng thực hiện truy vấn SQL vào cơ sở dữliệu nội bộ để lựa chọn hồ sơ khách
hàng từ cột info của bảng khách hàng.
Liệt kê 3. Máy chủ ứngdụng truy vấn cơ sở dữliệu để lấy hồ sơ người sử dụng
Connection conn= DriverManager.getConnection("jdbc:db2:article4");
Statement stmt = conn.createStatement();
stmt.setMaxRows(1);
ResultSet rs= stmt.executeQuery(
"select info from customers where custid='"+msg+"'");
if(rs.next ()) retValue=rs.getString(1);
stmt.close();
conn.close();
Dữ liệu khách hàng từ việc truy vấn cơ sở dữliệu được gửi lại chotrình khách dưới dạng dữliệu
XML.
Liệt kê 4. Tiêu đề của HTTP chodữliệu trả về được thiết đặt là XML
_res.setContentType("text/xml");
_res.setHeader("Cache-Control", "no-cache");
_res.getWriter().write(retValue);
Khi trình khách nhận được dữliệu khách hàng từ máy chủ ứng dụng, nó gọi hàm
getCustomerInfoCallback, ở đây dữliệuXMLcủa khách hàng được phântích cú pháp thành cây
DOM bằng cách sử dụng lớp bao bọc XMLParse và được lưu trong một biến toàn cục. Giao diện
người dùng được thay đổi để cho phép khách hàng nhập mã số của thành phố để liệt kê các
khách sạn ở đó.
Liệt kê 5. Tiêu đề của HTTP chodữliệu trả về được thiết đặt là XML
customerinfo= new xmlparse(xmlhttp.responseXML, false);
var hstr='<table cellSpacing="0" width="100%" cellPadding="2" border="0"
align="left">';
hstr+='<tr><td align="right">City Code:</td><td><INPUT type="text"
id="citycode"
SIZE=15 MAXLENGTH=50 value="msy" tabindex="1">';
hstr+='<td><INPUT type=button value="submit" onClick="javascript:getRates()"
>';
document.getElementById("canvas").innerHTML=hstr;
Bước 2
Bây giờ khách hàng tìm kiếm khách sạn ở thành phố nơi ông muốn đến du lịch.
Hình 5. Luồng lệnh và dữliệu để liệt kê danh sách khách sạn và giá phòng
Người dùng nhập mã số thành phố và nhấp chuột vào nút submit để gọi hàm getRates() trong
Javascript củatrình khách.
Hình 6. Tìm kiếm khách sạn theo mã thành phố
Hàm getRates tạo ra cuộc gọi cho máy chủ ứngdụng bằng cách sử dụng lược đồ XML
OTA_HotelAvailRQ, để yêu cầu thông tin về khách sạn.
Liệt kê 6. Tìm kiếm các thông điệp về khách sạn đã tạo ra bằng cách sử dụng lược đồ
OTA_HotelAvailRQ
var citycode=document.getElementById("citycode").value
var req='OTA_HotelSearchRQ xmlns="http://www.opentravel.org/OTA/2003/05"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05
OTA_HotelSearchRQ.xsd"
EchoToken="HL" Target="Production" Version="1.003" PrimaryLangID="EN-US"
ResponseType="PropertyList">'+
'<POS><Source AirlineVendorID="FG" PseudoCityCode="MIA" ISOCountry="US"
ISOCurrency="USD" AgentSine="A4444BM" AgentDutyCode="FR"></Source>'+
'<Source><RequestorID Type="5" ID="12345675"
ID_Context="IATA"/></Source></POS>'+
'<Criteria><Criterion><RefPoint></RefPoint><CodeRef LocationCode="23"
CodeContext="OTA-REF code list"/>'+
'<HotelRef HotelCityCode="'+citycode+'"/><Radius Distance="2"
DistanceMeasure="MILES"/>'+
'<RoomAmenity RoomAmenity="74"/><RoomAmenity RoomAmenity="123"/></Criterion>
</Criteria></OTA_HotelSearchRQ>';
Cuộc gọi danh sách khách sạn được gửi đến máy chủ ứngdụng như là một yêu cầu POST bằng
cách sử dụngcác API AJAX.
Liệt kê 7. Tìm kiếm thông điệp khách sạn được gửi đến máy chủ ứngdụng
var msg='<request cmd="hotelrates">'+req+'</request>';
var xmlhttpObj= new XMLHttpRequest();
xmlhttpObj.open('POST', servletpath, true);
xmlhttpObj.onreadystatechange = function() { getRatescallback(xmlhttpObj); };
xmlhttpObj.setRequestHeader('content-type', 'text/xml');
xmlhttpObj.send(msg);
Máy chủ ứngdụng tạo cuộc gọi SOAP tới thủ tục lưu sẵn getHotelRates trong cơ sở dữliệu
article4 chạy phía sau bức tường lửa của phòng ban nội bộ tạitại địa chỉ
http://localhost:8080/article4. Yêu cầu tìm kiếm khách sạn của OTA (msg) nhận được từtrình
khách được chuyển như một đối số đến thủ tục lưu sẵn.
Ghi chú: Thuộc tính SOAPAction của thông điệp SOAP được đặt theo tên của cơ sở dữ liệu.
Liệt kê 8. Ứngdụng thực hiện cuộc gọi SOAP đến thủ tục lưu sẵn getHotelRates củaDB2
String body="<db:getHotelRates xmlns:db='http://ibm.com/db2/soap'>"+
"<db:arg>"+msg+"</db:arg></db:getHotelRates>";
return sendURLMessage("http://localhost:8080/article4/db2soapdriver",
body,"http://ibm.com/db2/soap#article4");
Mặc dù có các API có sẵn để tạo thông điệp SOAP, bài viết này sử dụng mã lệnh gọi URL cơ
bản để minh họa rằng cuộc gọi SOAP không gì khác hơn là một cuộc gọi POST của HTTP trong
đó phần thân của thông điệp phù hợpvới lược đồ XML chuẩn hóa.
Ghi chú: SOAPAction được đặt theo tên của cơ sở dữliệu đích.
Liệt kê 9. Ứngdụng thực hiện cuộc gọi SOAP đến thủ tục lưu sẵn getHotelRates củaDB2
URL u = new URL(url);
URLConnection uc = u.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("SOAPAction", database_name);
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
wout.write("<?xml version='1.0'?>\r\n");
>
wout.write("xmlns:SOAP-ENV=");
wout.write("'http://schemas.xmlsoap.org/soap/envelope/' ");
wout.write("xmlns:SOAP-ENC=");
wout.write("'http://schemas.xmlsoap.org/soap/encoding/' " );
wout.write("SOAP-ENV:encodingStyle=");
wout.write("'http://schemas.xmlsoap.org/soap/encoding/' ");
wout.write("xmlns:xsi=");
wout.write("'http://www.w3.org/2001/XMLSchema-instance'> ");
wout.write(" <SOAP-ENV:Body>");
wout.write(msg);
wout.write(" </SOAP-ENV:Body>");
wout.write("</SOAP-ENV:Envelope>\r\n");
Vì rằng máy chủ ứngdụng không làm gì khác hơn là tạo ra lớp bao bọc SOAP và gọi cuộc gọi
URL, nếu các hạn chế an ninh trong AJAX cho phép, ta có thể cho rằng cuộc gọi SOAP cũng đã
có thể được thực hiện trực tiếp từtrình khách. Mặc dùcác cuộc gọi trực tiếp đến cơ sở dữliệutừ
một trình khách Web bằng cách sử dụngtrình điều khiển SOAP là khả thi, chúng không được
mong muốn vì lý do an ninh và trình điều khiển SOAP cần được tăng cường để ngăn chặn điều
này xảy ra.
Thủ tục lưu sẵn getHotelRates chỉ nhận một tham đối XML là yêu cầu OTA. XQuery chiết xuất
HotelCityCode từXML đầu vào và sử dụng nó để tìm kiếm và liệt kê tất cả các khách sạn có
thuộc tính HotelCityCode so khớp.
Liệt kê 10. Thủ tục lưu sẵn getHotelRates
CREATE PROCEDURE getHotelRates( IN request XML )
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE c_cur CURSOR WITH RETURN FOR
Select XMLQuery('declare namespace ns1 =
"http://www.opentravel.org/OTA/2003/05";
$info//ns1:HotelDescriptiveContents' passing info as "info")
from hotel
where xmlexists('declare namespace ns1 =
"http://www.opentravel.org/OTA/2003/05";
$info//ns1:HotelDescriptiveContents[@HotelCityCode=$req//ns1:HotelRef/@HotelC
ityCode]'
passing request as "req", info as "info" );
OPEN c_cur;
END
Đáp ứng SOAP được trả về cho máy chủ ứngdụngtừ db2soapdriver, đến lượt nó, được gửi về
máy khách mà không có bất kỳ sửa đổi nào. Điều này một lần nữa nhấn mạnh rằng trong mô
hình lậptrình XML, cơ sở dữliệu trở thành một nhân tố chính và trong nhiều trường hợp nó làm
giảm vai trò củacác máy chủ ứngdụng xuống là vai trò của cảnh sát giao thông.
Trình khách gọi hàm getRatescallback khi nó nhận được đáp ứngtừ máy chủ ứng dụng. Đáp ứng
SOAP đã trả về được phântích cú pháp bằng cách sử dụngtrìnhphântích DOM. Trìnhphântích
DOM được đặt cấu hình để xử lý các không gian tên trong đáp ứng SOAP.
Liệt kê 11. Máy khách phântích cú pháp đáp ứng SOAP từ máy chủ ứngdụng
soapxml= new xmlparse(xmlhttp.responseXML, false);
soapxml.xmlRoot.setProperty("SelectionNamespaces",
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:db='http://ibm.com/db2/soap'");
var hstr='<table cellSpacing="0" width="100%" cellPadding="2" border="1"
align="left">';
hstr+="<tr><td>name<td>rate<td>rooms<td>";
Mỗi hàng trong tập kết quả từ cơ sở dữliệu được chiết xuất vào một cây DOM khác, sau đó được
điều hướng bằng cách sử dụng XPath để trích xuất các thông tin liên quan. Một khung nhìn mới
được tạo ra chotrình khách, khung nhìn này cho thấy danh sách tất cả các khách sạn đã được trả
về. Xin lưu ý việc sử dụng bí danh không gian tên trongcác cuộc gọi XPath.
Liệt kê 12. Máy khách trích xuất tập kết quả từ cơ sở dữliệutừphần thân của SOAP
soapxml.find("//SOAP-ENV:Body//db:row",null,true);
for(i=0;soapxml.currentFind.length>i;i++)
{
var result=soapxml.getValue("db:col/text()",i);
rateslist=new xmlparse(result,true);
rateslist.xmlRoot.setProperty("SelectionNamespaces",
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:x='http://www.opentravel.org/OTA/2003/05' ");
var id=rateslist.getValue("//x:HotelDescriptiveContents/@HotelCode",null);
var name=rateslist.getValue("//x:HotelName/@HotelShortName",null);
var rooms=rateslist.getValue("//x:GuestRoomInfo/@Quantity",null);
var charge=rateslist.getValue("//x:Charge/@Amount",null);
hstr+="<tr><td>"+name+"<td>"+charge+"<td>"+rooms+"<td>
<input type='button' onClick=\"javascript:bookRoom('"+id+"','"+charge+"');
\" value='select'/>";
}
document.getElementById("canvas").innerHTML=hstr;
Bước 3
Trong bước cuối cùng này khách hàng sẽ chọn một khách sạn và đặt một phòng trong khách sạn
đó. Các thông tin về thẻ tín dụng được lấy từ hồ sơ khách hàng đã lưu trong cơ sở dữ liệu.
Hình 7. Luồng lệnh và dữliệu để đặt phòng
Bây giờ khách hàng có thể chọn khách sạn trong danh sách để đặt phòng tại khách sạn đó.
Hình 8. Đặt phòng trong danh sách khách sạn
Khi khách hàng nhấn nút Select, hàm bookroom trong Javascript phía khách được gọi. Một
thông điệp XMLvới yêu cầu đặt phòng sẽ được gửi đến máy chủ ứngdụng như là một yêu cầu
POST bằng cách sử dụngcác API AJAX. Yêu cầu này cũng có ID của khách sạn, tên khách
hàng, số phòng muốn đặt, và số tiền sẽ tính vào thẻ tín dụngcủa khách hàng.
Liệt kê 13. Máy khách gọi máy chủ ứngdụngvới cuộc gọi REST để đặt phòng
function bookRoom(hotelid,amount)
{
var cid=document.getElementById("userid").value;
var msg='<request cmd="bookroom"><message><ccinfo units="1" invoice=""
amount="'+amount+'"/><username>'+cid+'</username>
<hotelid>'+hotelid+'</hotelid></message></request>';
var xmlhttpObj= new XMLHttpRequest();
xmlhttpObj.open('POST', servletpath, true);
xmlhttpObj.onreadystatechange = function() { bookRoomcallback(xmlhttpObj); };
xmlhttpObj.setRequestHeader('content-type', 'text/xml');
xmlhttpObj.send(msg);
}
Máy chủ ứngdụngphântích cú pháp thông điệp đến và chiết xuất ID của khách hàng từ thông
điệp đó. Sau đó, nó gọi cơ sở dữliệu nội bộ để có thông tin về hồ sơ khách hàng và thẻ tín dụng
từ bảng khách hàng.
Ghi chú: Thông tin về thẻ tín dụng được lưu trữ trong một cột đã mật mã hóa trong bảng khách
hàng. Mặc dù mật khẩu trong đoạn mã lệnh ví dụ là mã cứng (hardcode), trong kịch bản thế giới
thực, nhiều khả năng nó sẽ là mật khẩu được khách hàng sử dụng để đăng nhập.
Liệt kê 14. Máy chủ ứngdụng truy vấn thông tin về thẻ tín dụng đã mật mã hóa từ cơ sở
dữ liệu
XMLParse msgxml=new XMLParse(msg);
String userid=msgxml.getValue("//username/text()");
Connection conn= DriverManager.getConnection("jdbc:db2:article4");
Statement stmt = conn.createStatement();
stmt.setMaxRows(1);
ResultSet rs= stmt.executeQuery("select info,
decrypt_char(CC,'password') from customers where custid='"+userid+"'");
if(rs.next ())
{
String custinfo=rs.getString(1);
String CCInfo=rs.getString(2);
[...]... Tóm tắt Các ứng dụngdựatrên kiến trúc hướng Web có thể làm giảm sự phức tạp của thiết kế và của mã lệnh bằng cách sử dụng mô hình dữliệuXML Khi cơ sở dữliệu được truy cập bằng cách sử dụngcác API mức cao, chẳng hạn như SOAP và REST, thì khả năng tíchhợpdữliệutừ nhiều cơ sở dữliệu đa dạng sẽ trở nên dễ dàng Trong một thế giới doanh nghiệp luôn luôn tiến triển với những cuộc sáp nhập và các đột... soapXML.setNamespaces(namespaces,"="); String invoice=soapXML.getValue("/ /db2: out/text()",null); Giá trị hóa đơn được thiết lậptrong thông điệp củatrình khách và được chuyển cho hàm giao dịch thẻ tín dụng Kết quả của giao dịch thẻ tín dụng được gửi lại chotrình khách cùng vớicác thông tin về hóa đơn Liệt kê 18 Máy chủ ứngdụng trả về kết quả của giao dịch thẻ tín dụng đến trình khách if(invoice!=null) { msgxml.setValue("//ccinfo/@invoice",invoice);... chiết xuất bằng cách sử dụng cuộc gọi XPath Xem tệp db2soapdriver.java để hiểu lược đồ trả lời SOAP sinh ra từ một cuộc gọi đến thủ tục lưu sẵn củaDB2 Liệt kê 17 Máy chủ ứngdụng chiết xuất số hóa đơn từ trả lời SOAP XMLParse soapXML= new XMLParse(true); soapXML.createDOM(soapstr,false); String namespaces= "SOAPENV=http://schemas.xmlsoap.org/soap/envelope/; db2= http://ibm.com /db2/ soap"; soapXML.setNamespaces(namespaces,"=");... msgxml.setValue("//ccinfo/@invoice",invoice); retValue=""+makePayment(msgxml,CCInfo)+""; Trong hàm giao dịch thẻ tín dụng, các thông tin về thẻ tín dụng và giỏ mua hàng được chiết xuất từ thông điện củatrình khách Liệt kê 19 Ứng dụng chiết xuất thông tin về thẻ tín dụng và giỏ mua hàng từ DOM XMLParse ccinfo=new XMLParse(cc); String units=msg.getValue("//ccinfo/@units"); String invno=msg.getValue("//ccinfo/@invoice");... room(s) "; Các thông tin này được chuyển đến trung tâm dịch vụ thẻ tín dụngcủa PayPal bằng cách sử dụngcác API cặp tên-giá trị (NVP) của chúng API NVP là một giao diện đơn giản vớicác hàm nghiệp vụ, quản lý rủi ro và lô-gic nghiệp vụ của PayPal Ở mức cơ bản nhất, việc sử dụngcác API NVP rất dễ dàng, giống như gửi một chuỗi NVP qua kết nối HTTPS đến máy chủ của PayPal, và sau đó xử lý đáp ứng, nó cũng...Tiếp theo, máy chủ ứng dụng tạo cuộc gọi SOAP đến thủ tục lưu sẵn bookaroom trong cơ sở dữliệu article4 chạy phía sau bức tường lửa của phòng ban nội bộ ID của khách sạn và các thông tin về hồ sơ của khách hàng được chuyển như một đối số đến thủ tục lưu sẵn Liệt kê 15 Máy chủ ứng dụng thực hiện cuộc gọi SOAP đến thủ tục lưu sẵn bookaroom String hotelid=msgxml.getValue("//hotelid/text()");... một thế giới doanh nghiệp luôn luôn tiến triển với những cuộc sáp nhập và các đột nhập về an ninh, thì cách tiếp cận hộp đen ẩn giấu dữliệu doanh nghiệp sau các dịch vụ Web là một đòi hỏi quan trọngXML là chất keo gắn kết kiến trúc này vớinhau và mô hình dữliệuXML là mô hình lậptrìnhtự nhiên trong môi trường này ... sẵn Nó nhằm mục đích cho thấy db2soapdriver xử lý đối số đầu ra và biểu diễn chúng trong đáp ứng SOAP Ghi chú: Nếu đó là một thủ tục lưu sẵn đang làm việc, thực sự đặt phòng, thì nó cũng sẽ yêu cầu các thông tin như ngày tháng nhập phòng và loại phòng để xử lý các giao dịch Đây là một bài tập, bạn có thể mở rộng các kịch bản bằng cách tăng cường mã phía trình khách để chấp nhận các thông tin vể ngày... nó cũng là một chuỗi NVP Việc thực hiện cuộc gọi API NVP bao gồm các bước cơ bản sau đây: 1 Xây dựng chuỗi tham số yêu cầu các NVP cho một phương thức API cụ thể 2 Gửi bằng HTTPS chuỗi tham số này đến một máy chủ PayPal 3 Xử lý các NVP trong đáp ứngtừ máy chủ Liệt kê 20 Ứngdụng trích xuất và tạo các cuộc gọi API NVP đến dịch vụ webcủa PayPal NVPEncoder encoder = new NVPEncoder(); encoder.add("METHOD","DoDirectPayment");... tại OTA Bạn cũng cần thêm một bảng khác để xử lý thông tin đặt phòng Liệt kê 16 Máy chủ ứng dụng thực hiện cuộc gọi SOAP đến thủ tục lưu sẵn bookaroom create procedure bookaroom (in hotelid varchar(12), in userinfo xml, out invoice varchar(64)) language SQL begin set invoice = 'INV001'; return 1; end Chuỗi trả lời SOAP được phântích cú pháp như là một đối tượng DOM bằng cách sử dụng lớp bao bọc XML, . Lập trình với XML cho DB2, Phần 4: Tích hợp dữ liệu từ
các nguồn dữ liệu khác nhau trong ứng dụng DB2 dựa
trên web của bạn
Giới thiệu.
conn.close();
Dữ liệu khách hàng từ việc truy vấn cơ sở dữ liệu được gửi lại cho trình khách dưới dạng dữ liệu
XML.
Liệt kê 4. Tiêu đề của HTTP cho dữ liệu