JAX-WS 2.0规范(四)

日期: 2008-10-09 作者:liang_ma 来源:TechTarget中国 英文

  继续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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

liang_ma
liang_ma

相关推荐