即使执行的操作没有返回值,webservices是否应返回值?

时间:2012-01-20 06:21:32

标签: web-services

假设由Web服务调用的过程执行的操作等同于void方法,它是否始终返回值?

1 个答案:

答案 0 :(得分:0)

从WSDL的角度来看,您有两个选择:

1:

<wsdl:types>
  ...
  <xs:element name="method1" type="x:MyType1" />
  ...

<wsdl:message name="msg1_1">
  <wsdl:part name="input" element="tns:method1" />
</wsdl:message>

<wsdl:portType name="MyInterface">
  <wsdl:operation name="method1">
    <wsdl:input name="req" message="tns:msg1_1" />
  </wsdl:operation>
  ...

2:

<wsdl:types>
  ...
  <xs:element name="method2" type="x:MyType2" />
  <xs:element name="method2Response">
    <xs:complexType>
      <xs:sequence />
    </xs:complexType>
  </xs:element>
  ...

<wsdl:message name="msg2_1">
  <wsdl:part name="input" element="tns:method2" />
</wsdl:message>
<wsdl:message name="msg2_1">
  <wsdl:part name="output" element="tns:method2Response" />
</wsdl:message>

<wsdl:portType name="MyInterface">
  <wsdl:operation name="method2">
    <wsdl:input name="req" message="tns:msg2_1" />
    <wsdl:output name="res" message="tns:msg2_2" />
  </wsdl:operation>
  ...

使用选项1,您可以获得单向操作,这有时可能是一个问题,因为客户端的调用返回时并不知道如何同意服务器端方法。< / p>

使用选项2,您可以正常请求 - 响应操作,您只需获得(几乎)空的SOAP响应。

(以上所有示例都使用 document / literal / wrapped 约定)

从实施的角度来看,如果您使用例如使用JAX-WS的Apache CXF最终会得到标准的,返回void的方法。