BSTEK Development Framework2(BDF2) : 8.2.1.定义XSD

      对于Spring-WS的contract-first模式来说,开发一个Webservice我们需要从定义一个XSD文件开始。我们要定义的Webservice允许用户发一个请求,当中包含请求的用户数目及用户所在的公司两个信息,Webservice服务在收到这个请求之后,会根据请求的用户数目及所在公司的ID,生成对应的用户,对于生成的用户应该包含四个信息,分别是:用户名、出生日期、性别及所在公司ID,最后Webservice服务将生成的用户集合返回给客户端。

      根据上述需求,我们的XSD内容编写如下:

UserSerivce.xsd的内容
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.bstek.com/ws" xmlns:tns="http://www.bstek.com/ws" elementFormDefault="qualified">
	<element name="UserRequest">
		<complexType>
			<all>
				<element name="userCount" type="int"></element>
				<element name="targetCompany" type="string"></element>
			</all>
		</complexType>
	</element>
	<element name="UserResponse">
		<complexType>
			<sequence>
				<element name="users" maxOccurs="unbounded" type="tns:User"></element>
			</sequence>
		</complexType>
	</element>
	
	<complexType name="User">
		<all>
			<element name="username" type="string"></element>
			<element name="birthday" type="date"></element>
			<element name="gender" type="boolean"></element>
			<element name="companyId" type="string"></element>
		</all>
	</complexType>
</schema>

      从上面的XSD内容来看,其中我们采用的namespace为http://www.bstek.com/ws,这个地址是虚拟的,用户在定义时可以灵活选择,在这个XSD内容当中,我们定义了一个名为User的复杂类型对象(complexType),它包含用户名、出生日期、性别及所在公司ID四个element,然后我们还定义两个element对象,分别是UserRequest及UserResponse,其中UserRequest中包含两element,分别是userCount及targetCompany,对应我们的需求就是请求的用户数目及所在公司的ID;另一个UserResponse中只有一个名为users的element,它的类型是我们自定义的User类型,且它的maxOccurs为unbounded表示这个element在UserRequest中数目不限制,对应到我们Java当中这个users是一个集合对象,一个包含User对象的集合对象(可能是一个Collection,也可能是一个数组)。

      在Spring-WS当中,在定义XSD时,以Request结尾的命名的element,默认将会被认为是Webservice调用的需要的输入信息(也就是调用参数);而以Response结尾命名的element默认将会被认为是Webservice调用的需要的输出信息(也就是调用返回的结果)。对照这个规则,上述的XSD当中,UserRequest将会作为Webservice的输入参数,而UserResponse则会作为Webservice的调用结果返回。