何时使用SOAPBinding.ParameterStyle.BARE和SOAPBinding.ParameterStyle.WRAPPED

sRa*_*Raj 3 java wsdl web-services

我很困惑,因为何时使用SOAPBinding.ParameterStyle.BARE和SOAPBinding.ParameterStyle.WRAPPED.以及哪种绑定样式更受欢迎.它们之间的区别是什么.

kin*_*gAm 9

ParameterStyle.Bare和ParameterStyle.Wrapped仅影响请求和响应消息的wsdl定义.

让我们举一个例子,我们有一个带有方法"test"的web服务,它有2个输入"string1"和"string2",它返回一个字符串为"rstring".

ParameterStyle.BARE 您的参数名称将作为wsdl中的部件名称显示.

请求消息:

<message name="test">
<part name="string1" element="tns:string1"/>
<part name="string2" element="tns:string2"/>
</message>
Run Code Online (Sandbox Code Playgroud)

回复信息:

<message name="testResponse">
  <part name="rstring" element="tns:rstring"/>
 </message>
Run Code Online (Sandbox Code Playgroud)

在你的xsd测试和testResponse将定义如下,你的wsdl元素直接引用测试中的元素和xsd的测试响应.

<xs:complexType name="test">
   <xs:sequence>
       <xs:element name="string1" type="xs:string" minOccurs="0"/>
       <xs:element name="string2" type="xs:string" minOccurs="0"/>
   </xs:sequence>
Run Code Online (Sandbox Code Playgroud)

<xs:complexType name="testResponse">
   <xs:sequence>
       <xs:element name="rstring" type="xs:string" minOccurs="0"/>
   </xs:sequence>
Run Code Online (Sandbox Code Playgroud)

ParameterStyle.WRAPPED

在这种风格中,您的请求和响应消息将作为"参数"包装在单个输入中,并输出为"结果".并且他们将在xsd中为该中的所有元素引用该特定元素.

请求消息:

 <message name="test">
 <part name="parameters" element="tns:test"/>
 </message>
Run Code Online (Sandbox Code Playgroud)

回复信息:

  <message name="testResponse">
     <part name="result" element="tns:testResponse"/>
 </message>
Run Code Online (Sandbox Code Playgroud)

在你的xsd测试中,testResponse将被定义为与上面相同,

<xs:complexType name="test">
   <xs:sequence>
       <xs:element name="string1" type="xs:string" minOccurs="0"/>
       <xs:element name="string2" type="xs:string" minOccurs="0"/>
   </xs:sequence>

<xs:complexType name="testResponse">
   <xs:sequence>
       <xs:element name="rstring" type="xs:string" minOccurs="0"/>
   </xs:sequence>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,您可以发现差异.这是他们在wsdl中唯一的区别.注意:上面的示例解释了文档类型soap绑定,在RPC中,不涉及xsd,因此RPC.Bare仅适用.