(1.)<wsdl: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.)<wsdl: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: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);