(1)definitions
这个是 WSDL 的根元素,我们要关心的是三个属性,name 属性值为公开的 Web 服务的接口的实现类+Service(上例中为 name="HelloServiceImplService",不同的 JAX-WS实现名字是不一样的 );targetNamespace指定目标名称空间,targetNamespace的值被后面的 xmlns:tns属性作为值 ,默认是使用接口实现类的包名的反缀(targetNamespace="http://server.soap.ilkj.net/" .xmlns:tns="http://server.soap.ilkj.net/"), 你可以使用@WebService注解的 targetNamespace属性指定你想要的名称空间。
(2)types
这个元素会通过<xs:element声明几个复杂数据类型的元素。一般首先你看到的是Web服务中的方法参数、返回值所涉及的所有复杂(complex)类型的元素定义<xs:element ,其中 name属性值是这个复杂类型的JAXB注解的 name属性值,type属性是 tns:+JAXB 注解的 name属性值的全小写形式(上例中的方法参数、返回值只涉及一个复杂类型 Customer,Customer的@XmlRootElement注解的 name属性值为 Customer,因此你会看到<xs:element name="Customer" type="tns:customer" />)。
再向下你会看到 XXX 元素和 XXXResponse 元素,其中 XXX 是方法名称(你可以使用@WebMethod 的 operationName 属性值指定 XXX 的值),XXX 是对方法参数的封装,XXXResponse是对返回值的封装,上例中你会看到
<xs:element name="selectMaxAgeStudentMethod"
type="tns:selectMaxAgeStudentMethod" />
<xs:element name="selectMaxAgeStudentMethodResponse"
type="tns:selectMaxAgeStudentMethodResponse" />
<xs:element name="selectMaxLongNameStudent"
type="tns:selectMaxLongNameStudent" />
<xs:element name="selectMaxLongNameStudentResponse"
type="tns:selectMaxLongNameStudentResponse" />
内容,最后你会看到一组<xs:complexType元素,这个元素通过 name 属性关联到<xs:element,它为前面定义的元素指定封装的具体内容(通过子元素<xs:sequence指定),上例中方法参数的复杂类型指定如下形式:
<xs:complexType name="selectMaxAgeStudentMethod">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="tns:customer" />
<xs:element minOccurs="0" name="arg1" type="tns:customer" />
</xs:sequence>
</xs:complexType>
我们看到方法参数名称为 arg0、arg1、,如果你想指定方法参数的名字在方法参数前使用
@WebParam的 name属性指定值,同样,方法的返回值同样可以使用@WebResult注解指定
相关的属性值。
例如:
@WebResult(name = "method")
Customer selectMaxAgeStudent(@WebParam(name = "c1") Customer c1,
@WebParam(name = "c2") Customer c2);
(3)message
这个元素将输入参数(方法参数)和响应结果(方法返回值)、受检查的异常信息包装为消息。
(4)portType
这个元素指定 Web服务的端口类型(Web服务会被发布为 EndPoint端点服务),它的 name属性默认为接口名称(你可以使用@WebService注解的 name属性指定值)。这个元素包含了一系列的operation 子元素指定该端点服务包含了那些操作(方法),
operation 的子元素input 、output 指定操作的输入输出(通过属性
message绑定到前面声明过的消息)。
(5.)binding
这个元素将前面最终的端点服务绑定到SOAP协议(你可以看出来 WSDL 从上到下依次有着依赖关系),其中的<soap:xxx的 style、use分别可以使用 SOAPBinding注解的 style、use属性指定值、operation指定公开的操作(方法)。这部分XML指定最终发布的 Web 服务的 SOAP 消息封装格式、发布地址等。
(6)service
这个元素的name属性指定服务名称(这里与根元素的 name属性相同),子元素port的name属性指定port名称,子元素<soap:address的location属性指定Web服务的地址。