继续WSDL 1.1到Java的映射…………
2.3.1 message和part
每一个wsdl:operation涉及一个或多个wsdl:message元素,这个元素里面有wsdl:input、wsdl:output和wsdl:fault子元素,分别描述此操作的输入、输出和默认消息。每一个操作可以指定一个输入消息,0或1个输出消息,0或1个默认消息。
例如:
<wsdl:portType name=”WebServiceSample”>
<wsdl:operation name=”findUsers”>
<wsdl:input message=”tns:findUsers” name=”findUsers” />
<wsdl:output message=”tns:findUsersResponse” name=”findUsersResponse” />
</wsdl:operation>
<wsdl:operation name=”say”>
<wsdl:input message=”tns:say” name=”say” />
<wsdl:output message=”tns:sayResponse” name=”sayResponse” />
</wsdl:operation>
<wsdl:operation name=”sayUserName”>
<wsdl:input message=”tns:sayUserName” name=”sayUserName” />
<wsdl:output message=”tns:sayUserNameResponse” name=”sayUserNameResponse” />
</wsdl:operation>
</wsdl:portType>
默认消息映射到应用里具体的异常。输入和输出消息的内容使用两个不同的样式映射到Java方法参数:非包装(non-wrapper)和(包装)wrapper样式。这两种映射样式在下面的部分描述。注意,portType的绑定会影响到portType到Java的映射。
注:
1. 使用javax.jws.SOAPBinding: 从portType映射的SEI必须使用javax.jws.SOAPBinding注释标注,它描述了样式、编码和参数样式的选择。这个注释可以被省略,如果它的所有属性都有默认值。
2. 使用javax.jws.WebParam:产生的Java方法参数必须使用javax.jws.WebParam注释标注。如果样式是rpc或样式是Document以及参数样式是空的,那么javax.jws.WebParam必须涉及到此参数的wsdl:part名。
3. 使用javax.jws.WebResult:产生的Java方法必须使用javax.jws.WebResult注释标注。如果样式是rpc或如果样式是Document以及蚕食类型是空的,那么javax.jws.WebResult的partName元素必须涉及此参数的wsdl:part名。如果参数的所有属性都有默认值,那么注释可以被省略。
2.3.1.1 非包装(Non-wrapper)样式
wsdl:message由0或多个wsdl:part元素组成。例如:
<wsdl:message name=”sayUserName”>
<wsdl:part element=”tns:sayUserName” name=”parameters” />
</wsdl:message>
<wsdl:message name=”say”>
<wsdl:part element=”tns:say” name=”parameters” />
</wsdl:message>
<wsdl:message name=”findUsers”>
<wsdl:part element=”tns:findUsers” name=”parameters” />
</wsdl:message>
<wsdl:message name=”sayResponse”>
<wsdl:part element=”tns:sayResponse” name=”parameters” />
</wsdl:message>
<wsdl:message name=”sayUserNameResponse”>
<wsdl:part element=”tns:sayUserNameResponse” name=”parameters” />
</wsdl:message>
<wsdl:message name=”findUsersResponse”>
<wsdl:part element=”tns:findUsersResponse” name=”parameters” />
</wsdl:message>
消息部分按如下分类:
in message部分当前仅在操作的输入消息里
out message部分当前仅在操作的输出消息里
in/out message部分当前在操作的输入和输出消息里
两个部分被认为是一样的,如果他们有相同的name属性值以及他们引用了相同的全局元素或类型。使用non-wrapper样式,message部分可以按照它们的分类映射到Java参数:
in message部分被映射为一个方法参数
out message部分被映射为一个方法参数,通过使用一个holder类(参见2.3.3)或
被映射为方法返回类型
in/out message部分使用一个holder类映射为一个方法参数
应用可以通过使用jaxws:parameter(参见8.7.3)绑定声明来定制这个映射。
2.3.2部分定义了规则,这个规则管理映射的Java方法中的参数次序以及被映射到方法返回类型的part的标识。
2.3.1.2 包装(Wrapper)样式
如果遇到下面的标准,WSDL operation将具有包装(wrapper)样式的映射:
1.operation的输入和输出消息(如果存在)都包含一个单一的part
2. 输入message part涉及了一个全局元素声明,这个全局元素的localname与operation名字一样
3. 输出message part涉及了一个全局元素声明
4. 输入和输出message part涉及的元素都是使用wsd:sequence排列定义的复杂类型
5. 包装元素仅包含子元素,它们一定不能包含其他结构,比如通配符(元素或属性),xsd:choice,置换群或属性。
在某些情况下,包装样式映射的使用会导致不需要的Java方法签名,这样的话非包装样式映射会更受欢迎一些。
使用包装样式,包装元素的子元素(今后叫做wrapper children)被映射到Java参数,wrapper children按如下分类:
in wrapper children仅在输入消息part的wrapper元素里
out wrapper children仅在输出消息part的wrapper元素里
in/out wrapper children在输入和输出消息part的wrapper元素里
如果两个wrapper children有相同的local名,相同的XML schema类型以及相同的Java类型(映射后),则认为它们是相等的。类似于non-wrapper,wrapper child的分类依赖于:
in wrapper child部分被映射为一个方法参数
out wrapper child部分被映射为一个方法参数,通过使用一个holder类(参见2.3.3)或被映射为方法返回类型
in/out wrapper child部分使用一个holder类映射为一个方法参数
应用可以通过使用jaxws:parameter(参见8.7.3)绑定声明来定制这个映射。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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社区一样。