这一章描述了WSDL 1.1到Java的映射。这个映射用于为客户端产生Web service接口以及从WSDL 1.1描述产生endpoint。
下面的部分描述了从每一个WSDL 1.1结构到等价的Java结构的默认映射。在WSDL 1.1里, 抽象的port type定义与协议的绑定之间还没有完全分开。绑定影响WSDL元素(用在抽象port type定义里)与Java方法参数之间的映射。
一个应用可以定制映射,使用嵌入式的绑定声明或者外部的绑定文件。
为了能让注释在运行时用于分发和集结,此规范要求产生的Java类和接口必须使用Web service的注释。这些注释必须如实地反应WSDL文档中的信息,如给出映射过程的输入、嵌入到文档里的以及通过外部绑定文件的定制。
2.1 定义
一个WSDL文档有一个根元素wsdl:definitions。一个wsdl:definitions元素和它相关的targetNamespace属性被映射到一个Java包。JAXB定义了一个从命名空间URI到Java包名的标准映射。默认地,这个算法用来将wsdl:definitions元素的targetNamespace属性映射到一个Java包名。比如
<wsdl:definitions name=”HelloWorld” targetNamespace=”http://server.ws.demo/” >
此服务类对应的包名为:demo.ws.server, 项目结构如下:
应用可以使用jaxws:package绑定声明来定制这个映射。
2.1.1 扩展
WSDL 1.1允许扩展元素和属性来增加到它的结构里。JAX-WS指定了SOAP和MIME绑定里定义的扩展元素和属性的Java映射。JAX-WS没有为其它任何扩展元素或属性指定映射,也没有提供一个标准的扩展框架,尽管这个支持可以通过一个标准的方法来增加。JAX-WS的后续版本可能会为标准扩展增加其它的支持,当可以获得这些标准扩展的时候。
注意,这样的支持可能限制了互用性以及应用的方便性。
2.2 PortType(端口类型)
WSDL port type是一个抽象操作定义的集合。一个wsdl:portType元素被映射到一个包中的Java接口,这里的包来自wsdl:definitions元素(详见2.1)。一个从wsdl:portType映射的Java接口被叫做一个Service Endpoint Interface(服务端点接口)或SEI。比如:下面是一段WSDL描述,
<wsdl:portType name=”HelloWorld”>
<wsdl:operation name=”sayHi”>
<wsdl:input message=”tns:sayHi” name=”sayHi” />
<wsdl:output message=”tns:sayHiResponse”
name=”sayHiResponse” />
</wsdl:operation>
</wsdl:portType>
对应接口中的方法为:
接口实现中的方法是:
应用可以定制这个映射,通过使用jaxws:class绑定声明。
一个SEI包含了从wsdl:portType的子元素wsdl:operation中映射的Java方法。详细参见后面的wsdl:operation映射。WSDL 1.1不支持port type继承,所以每一个产生的SEI将包含相应port type里的所有操作方法。
2.3 操作
每一个wsdl:portType里的wsdl:operation被映射到相应Java service endpoint接口中的一个Java方法。
应用通过使用jaxws:method可以定制这个映射。
WS-I Basic Profile R2304要求,wsdl:portType里的操作的name属性拥有唯一的值,因此WS-I 的映射将不会使用重载(overload)方法产生Java接口。然而,为了向后兼容,JAX-WS支持操作重载,即假设重载在映射的Java SEI(service endpoint interface)声明中不会产生冲突。
notification和solicit-response操作的映射超出了本节的范围,不再陈述。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。