[zt]Web Service CXF 实战1-服务定义
[font=Arial][size=5]Web Service CXF 实战1-服务定义[/size] [/font][font=Arial]版权声明:转载时请务必以超链接形式标明文章原文出处和作者信息
个人声明:文章中的内容如果引用了您的原创,给您带来了负面的影响,请联系我
技术支持:如果有任何文章相关的技术问题,请联系[/font][email=bldmickey@gmail.com][font=Arial][size=2][color=#000000]bldmickey@gmail.com[/color][/size][/font][/email]
Web Service开发 开发Web Service的两种方法:
[list][*]创建WSDL文件, 从WSDL文件生成代码.(本文的方式)[*]从POJO(Plain Old Java Object)开始,注释POJO,通过注释自动创建WSDL文件,同时生成相关代码.(<<Web Service Eclipse CXF集成.doc>>中描述的就是从POJO开始开发的方法.)[/list]
实战服务设计[list][*][b]图书订单[/b][b]Service[/b][/list] 服务的输入图书订单(BookOrder)
服务的输出(BookOrderResponse).
[list][*][b]图书订单[/b][b](BookOrder)[/b][b]的信息[/b][b]:[/b][/list] 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 邮政编码
[list][*][b]服务的输出[/b][/list] 图书订单返回(BookOrderResponse)的信息:
Return 返回的状态(成功或者失败)
Returninfo 返回的信息(可以多行)
图书订单服务的WSDL[table][tr][td][align=left]<?xml version="1.0" encoding="UTF-8"?>[/align][align=left]<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/">[/align][align=left]<wsdl:types>[/align][align=left]<xsd:schema targetNamespace="http://www.example.org/cxfstp04/">[/align][align=left] <xsd:element name="BookOrder" type="ns1:BookOrder"/>[/align][align=left] <xsd:element name="BookOrderResponse" type="ns1:BookOrderResponse"/>[/align]
[align=left] <xsd:complexType name="Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="name" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="street" type="xsd:string"[/align][align=left] maxOccurs="unbounded">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="city" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="country" type="xsd:string"></xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:complexType name="Book">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="title" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="quantity" type="xsd:unsignedShort"></xsd:element>[/align][align=left] <xsd:element name="wholesale-price" type="xsd:float"></xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:complexType name="UKAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:extension base="ns1:Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="postcode"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:extension>[/align][align=left] </xsd:complexContent>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:complexType name="USAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:extension base="ns1:Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="state"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="zip"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:extension>[/align][align=left] </xsd:complexContent>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:complexType name="BriefUSAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:restriction base="ns1:USAddress">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="name" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="street" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="zip" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:restriction>[/align][align=left] </xsd:complexContent>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:simpleType name="Total">[/align][align=left] <xsd:restriction base="xsd:float">[/align][align=left] <xsd:maxExclusive value="100000"></xsd:maxExclusive>[/align][align=left] <xsd:minExclusive value="0"></xsd:minExclusive>[/align][align=left] <xsd:pattern value="[0-9]+\.[0-9]{2}"></xsd:pattern>[/align][align=left] </xsd:restriction>[/align][align=left] </xsd:simpleType>[/align]
[align=left] <xsd:complexType name="BookOrder">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="accountName" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="accountNumber"[/align][align=left] type="xsd:unsignedShort">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="shipAddress"[/align][align=left] type="ns1:Address">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="billAddress"[/align][align=left] type="ns1:Address">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="book" type="ns1:Book"></xsd:element>[/align][align=left] <xsd:element name="total" type="ns1:Total"></xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] <xsd:attribute name="orderDate" type="xsd:date"></xsd:attribute>[/align][align=left] </xsd:complexType>[/align]
[align=left] <xsd:complexType name="BookOrderResponse">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element minOccurs="0" name="return" type="xsd:string"/>[/align][align=left] <xsd:element name="returninfo" type="xsd:string" maxOccurs="unbounded"/>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align]
[align=left]</xsd:schema>[/align][align=left]</wsdl:types>[/align][align=left]<wsdl:message name="BookOrderResponse">[/align][align=left] <wsdl:part name="result" element="ns1:BookOrderResponse">[/align][align=left] </wsdl:part>[/align][align=left]</wsdl:message>[/align][align=left]<wsdl:message name="BookOrder">[/align][align=left] <wsdl:part name="parameters" element="ns1:BookOrder">[/align][align=left]</wsdl:part>[/align][align=left]</wsdl:message>[/align][align=left]<wsdl:portType name="OrderBook">[/align][align=left] <wsdl:operation name="OrderBookOper">[/align][align=left] <wsdl:input name="BookOrder" message="ns1:BookOrder">[/align][align=left] </wsdl:input>[/align][align=left] <wsdl:output name="BookOrderResponse" message="ns1:BookOrderResponse">[/align][align=left] </wsdl:output>[/align][align=left] </wsdl:operation>[/align][align=left]</wsdl:portType>[/align][align=left]<wsdl:binding name="cxfstp04ServiceBinding" type="ns1:OrderBook">[/align][align=left] <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>[/align][align=left] <wsdl:operation name="OrderBookOper">[/align][align=left] <soap:operation soapAction="" style="document"/>[/align][align=left] <wsdl:input name="BookOrder">[/align][align=left] <soap:body use="literal"/>[/align][align=left] </wsdl:input>[/align][align=left] <wsdl:output name="BookOrderResponse">[/align][align=left] <soap:body use="literal"/>[/align][align=left] </wsdl:output>[/align][align=left] </wsdl:operation>[/align][align=left]</wsdl:binding>[/align][align=left]<wsdl:service name="cxfstp04Service">[/align][align=left] <wsdl:port name="OrderBookPort" binding="ns1:cxfstp04ServiceBinding">[/align][align=left] <soap:address location="http://localhost:9090/OrderBook"/>[/align][align=left] </wsdl:port>[/align][align=left]</wsdl:service>[/align][align=left]</wsdl:definitions>[/align]
[/td][/tr][/table]
[color=#1e700e][font=Arial]Eclipse WSDL[/font][font=宋体]设计[/font][/color][font=宋体][color=#1e700e][img=600,409]http://119.img.pp.sohu.com/images/blog/2007/9/10/12/6/11587fe4a48.jpg[/img][/color][/font][font=Arial][color=#1e700e][img=605,403]http://119.img.pp.sohu.com/images/blog/2007/9/10/12/7/11587ff33c7.jpg[/img][/color][/font][font=Arial][color=#1e700e][img=605,408]http://118.img.pp.sohu.com/images/blog/2007/9/10/11/27/11587f15f05.jpg[/img][/color][/font]图书订单服务Schema描述[table][tr][td]WSDL定义
[/td][/tr][tr][td][align=left]<?xml version="1.0" encoding="UTF-8"?>[/align][align=left]<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/">[/align][align=left]<wsdl:types>[/align][align=left]<xsd:schema targetNamespace="http://www.example.org/cxfstp04/">[/align][align=left] <xsd:element name="BookOrder" type="ns1:BookOrder"/>[/align][align=left] <xsd:element name="BookOrderResponse" type="ns1:BookOrderResponse"/>[/align][align=left]…[/align][align=left]</xsd:schema>[/align][/td][/tr][tr][td]地址类型Address(通用类型),包括的元素:
[list][*]名字name[*]街道street(街道出现次数没有限制)[*]城市city[*]国家country[/list][/td][/tr][tr][td][align=left]<xsd:complexType name="Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="name" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="street" type="xsd:string"[/align][align=left] maxOccurs="unbounded">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="city" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="country" type="xsd:string"></xsd:element>[/align][align=left] </xsd:sequence>[/align] </xsd:complexType>
[/td][/tr][tr][td]美国地址类型(派生于Address),添加下面的元素:
[list][*]州state[*]邮编zip[/list]所以USAddress 类型一共包含6个元素(name, street, city, state, country和zip).
[/td][/tr][tr][td][align=left] <xsd:complexType name="USAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:extension base="ns1:Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="state"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="zip"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:extension>[/align][align=left] </xsd:complexContent>[/align] </xsd:complexType>
[/td][/tr][tr][td]简略美国地址类型(限制于USAddress),包括的元素:
[list][*]名字name[*]街道street[*]邮编zip[/list]BriefUSAddress将简化美国地址类型,只包括name,street和zip这三个元素
[/td][/tr][tr][td][align=left]<xsd:complexType name="BriefUSAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:restriction base="ns1:USAddress">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="name" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="street" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="zip" type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:restriction>[/align][align=left] </xsd:complexContent>[/align] </xsd:complexType>
[/td][/tr][tr][td]英国地址:(派生于Address),添加下面的元素:
[list][*]邮编postcode[/list]所以UKAddress类型一共包含5个元素(name, street, city, state, and postcode).
[/td][/tr][tr][td][align=left]<xsd:complexType name="UKAddress">[/align][align=left] <xsd:complexContent>[/align][align=left] <xsd:extension base="ns1:Address">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="postcode"[/align][align=left] type="xsd:string">[/align][align=left] </xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:extension>[/align][align=left] </xsd:complexContent>[/align] </xsd:complexType>
[/td][/tr][tr][td]书:包括元素:
[list][*]标题title[*]数量quantity[*]批发价格[/list][/td][/tr][tr][td][align=left] <xsd:complexType name="Book">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="title" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="quantity" type="xsd:unsignedShort"></xsd:element>[/align][align=left] <xsd:element name="wholesale-price" type="xsd:float"></xsd:element>[/align][align=left] </xsd:sequence>[/align] </xsd:complexType>
[/td][/tr][tr][td]总价(简单类型)
[list][*]基于xsd:float[*]值大于0小于100000[*]格式#####.##[/list][/td][/tr][tr][td][align=left]<xsd:simpleType name="Total">[/align][align=left] <xsd:restriction base="xsd:float">[/align][align=left] <xsd:maxExclusive value="100000"></xsd:maxExclusive>[/align][align=left] <xsd:minExclusive value="0"></xsd:minExclusive>[/align][align=left] <xsd:pattern value="[0-9]+\.[0-9]{2}"></xsd:pattern>[/align][align=left] </xsd:restriction>[/align]</xsd:simpleType>
[/td][/tr][tr][td]订单,包括元素
[list][*]帐号名accountName[*]帐号accountNumber[*]邮寄地址shipAddress[*]Billing地址billAddress[*]书book[*]总价total[/list]其中邮寄地址和Billing地址将采用多态的方式,在实例的时候确定具体的类型
[/td][/tr][tr][td][align=left] <xsd:complexType name="BookOrder">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element name="accountName" type="xsd:string"></xsd:element>[/align][align=left] <xsd:element name="accountNumber"[/align][align=left] type="xsd:unsignedShort">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="shipAddress"[/align][align=left] type="ns1:Address">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="billAddress"[/align][align=left] type="ns1:Address">[/align][align=left] </xsd:element>[/align][align=left] <xsd:element name="book" type="ns1:Book"></xsd:element>[/align][align=left] <xsd:element name="total" type="ns1:Total"></xsd:element>[/align][align=left] </xsd:sequence>[/align][align=left] <xsd:attribute name="orderDate" type="xsd:date"></xsd:attribute>[/align] </xsd:complexType>
[/td][/tr][tr][td][align=left]订单返回,包括元素[/align][list][*]返回结果(成功或者失败)[*]返回信息(没有限制字符串,模拟多个返回信息)[/list][/td][/tr][tr][td][align=left] <xsd:complexType name="BookOrderResponse">[/align][align=left] <xsd:sequence>[/align][align=left] <xsd:element minOccurs="0" name="return" type="xsd:string"/>[/align][align=left] <xsd:element name="returninfo" type="xsd:string" maxOccurs="unbounded"/>[/align][align=left] </xsd:sequence>[/align][align=left] </xsd:complexType>[/align][/td][/tr][/table]
图书订单服务实例[table][tr][td]输入
[list][*]xsi:type 属于XML schema-instance命名空间,告诉解析器根据派生后的类型validate元素[*]定义了一些属性,包括xsi:schemaLocation和xsi:type,这里的xsi:schemaLocation的含义:帮助XML处理程序确定XML文档实例使用的实际物理模式文档的位置,意思是:用po2.xsd来验证[url=http://www.monson-haefel.com/jwsbook][color=#000000]http://www.Monson-Haefel.com/jwsbook[/color][/url]这个命名空间[/list][/td][/tr][tr][td] <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>
[/td][/tr][/table]
页:
[1]