Web Service開發 開發Web Service的兩種方法:
- 建立WSDL檔案, 從WSDL檔案生成代碼.(本文的方式)
- 從POJO(Plain Old Java Object)開始,注釋POJO,通過注釋自動建立WSDL檔案,同時生成相關代碼.(<<Web Service Eclipse CXF內建.doc>>中描述的就是從POJO開始開發的方法.)
實戰服務設計
- 圖書訂單Service
服務的輸入圖書訂單(BookOrder)
服務的輸出(BookOrderResponse).
- 圖書訂單(BookOrder)的資訊:
accountName 帳号名
accountNumber 帳号
shipAddress 發貨位址
billAddress 帳單位址
book 圖書訂單
total 總價
圖書的資訊book包括:
Title 書名
Quantity 訂單數目
wholesale-price 批發價
發貨位址和帳單位址類型的基礎類型為Address包括:
Name 位址名稱
Street 街道(可以多行)
City 城市
Country 國家
派生的位址類别UKAddress還包括:
Postcode 郵政編碼
派生的位址類别USAddress還包括:
State 州
Zip 郵政編碼
限制的位址BriefUSAddress隻包括下面資訊(限制于USAddress):
Name 名字
Street 街道
Zip 郵政編碼
- 服務的輸出
圖書訂單傳回(BookOrderResponse)的資訊:
Return 傳回的狀态(成功或者失敗)
Returninfo 傳回的資訊(可以多行)
圖書訂單服務的WSDL
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="cxfstp04Service" targetNamespace="http://www.example.org/cxfstp04/" xmlns:ns1="http://www.example.org/cxfstp04/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <wsdl:types> <xsd:schema targetNamespace="http://www.example.org/cxfstp04/"> <xsd:element name="BookOrder" type="ns1:BookOrder"/> <xsd:element name="BookOrderResponse" type="ns1:BookOrderResponse"/> <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> <xsd:element name="street" type="xsd:string" maxOccurs="unbounded"> </xsd:element> <xsd:element name="city" type="xsd:string"></xsd:element> <xsd:element name="country" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Book"> <xsd:sequence> <xsd:element name="title" type="xsd:string"></xsd:element> <xsd:element name="quantity" type="xsd:unsignedShort"></xsd:element> <xsd:element name="wholesale-price" type="xsd:float"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="UKAddress"> <xsd:complexContent> <xsd:extension base="ns1:Address"> <xsd:sequence> <xsd:element name="postcode" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="USAddress"> <xsd:complexContent> <xsd:extension base="ns1:Address"> <xsd:sequence> <xsd:element name="state" type="xsd:string"> </xsd:element> <xsd:element name="zip" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="BriefUSAddress"> <xsd:complexContent> <xsd:restriction base="ns1:USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"> </xsd:element> <xsd:element name="street" type="xsd:string"> </xsd:element> <xsd:element name="zip" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:simpleType name="Total"> <xsd:restriction base="xsd:float"> <xsd:maxExclusive value="100000"></xsd:maxExclusive> <xsd:minExclusive value="0"></xsd:minExclusive> <xsd:pattern value="[0-9]+\.[0-9]{2}"></xsd:pattern> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="BookOrder"> <xsd:sequence> <xsd:element name="accountName" type="xsd:string"></xsd:element> <xsd:element name="accountNumber" type="xsd:unsignedShort"> </xsd:element> <xsd:element name="shipAddress" type="ns1:Address"> </xsd:element> <xsd:element name="billAddress" type="ns1:Address"> </xsd:element> <xsd:element name="book" type="ns1:Book"></xsd:element> <xsd:element name="total" type="ns1:Total"></xsd:element> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"></xsd:attribute> </xsd:complexType> <xsd:complexType name="BookOrderResponse"> <xsd:sequence> <xsd:element minOccurs="0" name="return" type="xsd:string"/> <xsd:element name="returninfo" type="xsd:string" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="BookOrderResponse"> <wsdl:part name="result" element="ns1:BookOrderResponse"> </wsdl:part> </wsdl:message> <wsdl:message name="BookOrder"> <wsdl:part name="parameters" element="ns1:BookOrder"> </wsdl:part> </wsdl:message> <wsdl:portType name="OrderBook"> <wsdl peration name="OrderBookOper"> <wsdl:input name="BookOrder" message="ns1:BookOrder"> </wsdl:input> <wsdl utput name="BookOrderResponse" message="ns1:BookOrderResponse"> </wsdl utput> </wsdl:operation> </wsdl:portType> <wsdl:binding name="cxfstp04ServiceBinding" type="ns1:OrderBook"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="OrderBookOper"> <soap:operation soapAction="" style="document"/> <wsdl:input name="BookOrder"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="BookOrderResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="cxfstp04Service"> <wsdl:port name="OrderBookPort" binding="ns1:cxfstp04ServiceBinding"> <soap:address location="http://localhost:9090/OrderBook"/> </wsdl:port> </wsdl:service> </wsdl:definitions> |
Eclipse WSDL設計
圖書訂單服務Schema描述
WSDL定義 |
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="cxfstp04Service" targetNamespace="http://www.example.org/cxfstp04/" xmlns:ns1="http://www.example.org/cxfstp04/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> <wsdl:types> <xsd:schema targetNamespace="http://www.example.org/cxfstp04/"> <xsd:element name="BookOrder" type="ns1:BookOrder"/> <xsd:element name="BookOrderResponse" type="ns1:BookOrderResponse"/> … </xsd:schema> |
位址類型Address(通用類型),包括的元素:
|
<xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"></xsd:element> <xsd:element name="street" type="xsd:string" maxOccurs="unbounded"> </xsd:element> <xsd:element name="city" type="xsd:string"></xsd:element> <xsd:element name="country" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> |
美國位址類型(派生于Address),添加下面的元素:
|
<xsd:complexType name="USAddress"> <xsd:complexContent> <xsd:extension base="ns1:Address"> <xsd:sequence> <xsd:element name="state" type="xsd:string"> </xsd:element> <xsd:element name="zip" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> |
簡略美國位址類型(限制于USAddress),包括的元素:
|
<xsd:complexType name="BriefUSAddress"> <xsd:complexContent> <xsd:restriction base="ns1:USAddress"> <xsd:sequence> <xsd:element name="name" type="xsd:string"> </xsd:element> <xsd:element name="street" type="xsd:string"> </xsd:element> <xsd:element name="zip" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> |
英國位址:(派生于Address),添加下面的元素:
|
<xsd:complexType name="UKAddress"> <xsd:complexContent> <xsd:extension base="ns1:Address"> <xsd:sequence> <xsd:element name="postcode" type="xsd:string"> </xsd:element> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> |
書:包括元素:
|
<xsd:complexType name="Book"> <xsd:sequence> <xsd:element name="title" type="xsd:string"></xsd:element> <xsd:element name="quantity" type="xsd:unsignedShort"></xsd:element> <xsd:element name="wholesale-price" type="xsd:float"></xsd:element> </xsd:sequence> </xsd:complexType> |
總價(簡單類型)
|
<xsd:simpleType name="Total"> <xsd:restriction base="xsd:float"> <xsd:maxExclusive value="100000"></xsd:maxExclusive> <xsd:minExclusive value="0"></xsd:minExclusive> <xsd:pattern value="[0-9]+\.[0-9]{2}"></xsd:pattern> </xsd:restriction> </xsd:simpleType> |
訂單,包括元素
|
<xsd:complexType name="BookOrder"> <xsd:sequence> <xsd:element name="accountName" type="xsd:string"></xsd:element> <xsd:element name="accountNumber" type="xsd:unsignedShort"> </xsd:element> <xsd:element name="shipAddress" type="ns1:Address"> </xsd:element> <xsd:element name="billAddress" type="ns1:Address"> </xsd:element> <xsd:element name="book" type="ns1:Book"></xsd:element> <xsd:element name="total" type="ns1:Total"></xsd:element> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"></xsd:attribute> </xsd:complexType> |
訂單傳回,包括元素
|
<xsd:complexType name="BookOrderResponse"> <xsd:sequence> <xsd:element minOccurs="0" name="return" type="xsd:string"/> <xsd:element name="returninfo" type="xsd:string" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> |
圖書訂單服務執行個體
輸入
|
<ns2:BookOrder xmlns:ns2="http://www.example.org/cxfstp04/" orderDate="2007-09-08Z"> <accountName>Amazon.com</accountName> <accountNumber>923</accountNumber> <shipAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:UKAddress"> <name>Amazon.co.uk</name> <street>line1: Ridgmont Road</street> <street>line2: Ridgmont Road</street> <city>Bedford</city> <country>United Kingdom</country> <postcode>MK43 0ZA</postcode> </shipAddress> <billAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:BriefUSAddress"> <name>Amazon.com</name> <street>line1: 1516 2nd Ave</street> <street>line2: 1516 2nd Ave</street> <street>line3: 1516 2nd Ave</street> <zip>90952</zip> </billAddress> <book> <title>Java Web Services</title> <quantity>300</quantity> <wholesale-price>24.99</wholesale-price> </book> <total>8997.0</total> </ns2:BookOrder> |
轉載于:https://www.cnblogs.com/Thomson-Blog/articles/1334967.html