Java Mobile
name="number" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="type" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="balance" type="s:decimal" />
</s:sequence>
<s:attribute name="status" type="s:string" />
</s:complexType>
Da vào định nghĩa trên, mt đối tượng thuc lp Acct có th được th hin như
sau:
<?xml version="1.0" encoding="utf-8"?>
<account status="active">
<description>Adam's savings acct</description>
<number>1234-XX</number>
<type>SV</type>
<balance>10000</balance>
</account>
Sau đó chúng ta phi định nghĩa cu trúc các thông đip đưc trao đổi trong
quá trình gi hàm và nhn kết qu. Ta tuân theo mt quy tc: cu trúc gói tin request
(li gi hàm) s có tên trùng vi tên hàm, cu trúc gói tin response s có tên là tên
hàm cng vi Response cui.
<s:element name="GetAccount">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="acctNumber" nillable="true"
166
Java Mobile
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAccountResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="account" type="s0:Acct" />
</s:sequence>
</s:complexType>
</s:element>
Trên đây là toàn b ni dung phn types.
8.3.2.2. Phn t message:
Bên cnh vic định nghĩa các kiu d liu được truyn gia client và server
ta cn phi định nghĩa các thông đip được truyn đi và hi đáp. Bi và các thông
đip không ph thuc vào các giao thc tng dưới nên các thông đip có th đưc
định nghĩa dưới dng HTTP-GET/POST, SOAP hay bt k mt protocol nào h tr
Web Service.
Chúng ta có th đặt tên bt k cho thông đip vì web service không đưa ra
mt ràng buc cũng như quy tc đặt tên nào c. Các phn t message có th cha
nhiu phn t con "part" (cũng có khi không cha phn t con nào). Mt phn t
"part" tượng trưng cho mt tham s được truyn trong hàm. Mt phn t part phi
có mt tên và kiu d liu tương ng đã được định nghĩa.
Đối vi ví d trên thì phn t message có dng như sau:
<message name="GetAccountIn">
<part name="parameters" element="s0:GetAccount" />
</message>
167
Java Mobile
<message name="GetAccountOut">
<part name="parameters" element="s0:GetAccountResponse" />
</message>
đây ta gp li cu trúc GetAccout và GetAccountResponse đã định nghĩa
phn types. Theo như định nghĩa trên, thông đip đầu vào GetAccountIn nhn mt
tham s có kiu GetAccount và thông đip đầu ra GetAccountOut tr v mt kết
qu có kiu GetAccountResponse; c hai kiu này đã được định nghĩa phn t
types trước đó. Các message được định nghĩa này s đưc dùng phn sau.
8.3.2.3. Phn t portType:
Ta có th nói mt cách đơn gin như sau: phn t “types” định nghĩa các
kiu d liu, phn t “message” định nghĩa tt c các thông đip (hay cũng có th
gi là gói tin) vào/ra nhưng li chưa th hin được “thông đip nào là ca phương
thc nào”, vai trò này do portType đảm nhn.
<portType name="BankService">
<operation name="GetAccount">
<input message="s0:GetAccountIn" />
<output message="s0:GetAccountOut" />
</operation>
</portType>
Chúng ta có th nhn thy, các t khóa input và output được dùng để ch rõ gói
tin request và gói tin response.
Phn định nghĩa portType trên cũng khá đơn gin, đối vi hàm GetAccount ( ) s
hai thông đip:
Thông đip input: Li gi hàm t client gi lên server, có tên
GetAccountIn. Nếu đọc ngược lên phn t message, ta s thy thông đip
168
Java Mobile
GetAccountIn s có kiu GetAccount, và kiu d liu GetAccount được định
nghĩa trong phn t types.
Thông đip output: Kết qu tr v được gi t server đến client, có tên
GetAccountOut. Tương t, phn t message đã cho chúng ta biết thông đip
GetAccountOut s có kiu GetAccountResponse và kiu này đã được định
nghĩa trong phn types.
8.3.2.4. Phn t binding
Các phn t chúng ta đã xem xét qua có trách nhim định nghĩa web service
mt cách tru tượng: chúng cho biết các phương thc được web service h tr, các
thông tin kèm theo như tham s truyn vào, kết qu tr v ca mi phương thc.
Tuy nhiên, vi nhng thông tin trên chúng ta chưa xác định được s phi dùng công
c nào để truy xut đến web service này: ta s dùng SOAP kết hp vi HTTP hay
SOAP/HTTPS hay công c nào khác? Phn t binding s định nghĩa cách thc truy
cp web service thông qua các protocols bên dưi.
Mi phn t binding s mô t cách thc liên kết mt portType vào mt
protocol nht định. Nếu web service ca chúng ta h tr nhiêu protocol thì phi to
cho mi protocol mt phn t binding.
<binding name="BankService" type="s0:BankService">
<soap:binding transport = "http://schemas.xmlsoap.org/soap/http"
style="document" />
<operation name="GetAccount">
<soap:operation soapAction =
“http://woodgrovebank.com/GetAccount” style="document" />
<input>
<soap:body use="literal" />
</input>
169
Java Mobile
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
Đon ví d trên cho biết web service s dng SOAP là protocol trao đổi
thông tin và gói tin soap s được vn chuyn bng HTTP, chúng ta có th s dng
nhiu công c khác để truy xut đến các hàm ca web service nhưng SOAP hin
nay là thông dng nht. Đon định nghĩa trên còn ch rõ “document/encoding style”
được s dng là dng document/literal (còn có mt dng khác khá ph biến là
rpc/encoded; hin ti j2me ch h tr web service dng document/literal).
8.3.2.5. Phn t service:
Phn cui cùng ca file WSDL cha định nghĩa các thông s vt lý c th
dùng để truy xut đến web service.
<service name="BankService">
<port name="BankService" binding="s0:BankService">
<soap:address location =
"http://www.woodgrovebank.com/Bank/BankService.asmx"/>
</port>
</service>
Giá tr location trong phn t port ch rõ v trí đặt web service. Phn t
“binding” cho biết cách thc ánh x các phương thc trong phn t “portType”
thành các gói tin SOAP (hoc gói tin ca các protocols khác) nhưng không cho biết
làm thế nào để to được mt đối tượng portType. Đấy là nhim v ca phn t port,
phn t port s ánh x mt phn t portType sang mt địa ch URI c th. Node
170