WSDL-Content,binding:显示的输入类型" literal"而不是complextype的名称

时间:2016-07-06 07:39:14

标签: java web-services soap wsdl complextype

我将我的web服务部署到了tomcat。在wsdl文件中,绑定部分是:

<binding name="mywsPortBinding" type="tns:mywsInterface">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
   <operation name="update">
        <soap:operation soapAction=""/>
        <input> <soap:body use="literal"/> </input>
        <output> <soap:body use="literal"/> </output>
   </operation>
</binding>

我的问题:为什么输入和输出类型显示为&#34;字面值&#34;? 作为响应,该web服务根据指定的xsd发送回某些xml-complextyped数据。为什么没有在wsdl中显示copmlex类型名称?

2 个答案:

答案 0 :(得分:1)

  

在&#39; literal&#39;的情况下,抽象类型定义本身成为具体定义(它们是文字和定义)。在这种情况下,您只需检查XML Schema类型定义即可确定具体的消息格式。例如,文档/文字绑定的操作在线上看起来像这样:

<SOAP-ENV:Envelope 
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
>
   <SOAP-ENV:Body>
      <m:Add xmlns:m="http://example.org/math/types/">
         <x>3.14159265358979</x>
         <y>3.14159265358979</y>
      </m:Add>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
  

请注意,SOAP Body只包含Add的实例   模式中定义的元素 - 这就是使document / literal如此的原因   有吸引力的。

参考:Understanding WSDL

答案 1 :(得分:0)

在绑定中,“literal”仅定义了所使用的编码样式,复杂的Type名称显示在“wsdl:message”定义中,该定义在“wsdl:portType”中的“wsdl:operation”中使用。

你应该有这样的东西。 `

<xs:element name="update" type="tns:update"/>
<xs:complexType name="update">
    <xs:sequence>
        <xs:element name="arg0" type="xs:string"/>
        <xs:element name="arg1" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<xs:element name="updateResponse" type="tns:updateResponse"/>
<xs:complexType name="updateResponse">
    <xs:sequence>
        <xs:element name="arg0" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<wsdl:message name="update">
    <wsdl:part element="tns:update" name="parameters"/>
</wsdl:message>
<wsdl:message name="updateResponse">
    <wsdl:part element="tns:updateResponse" name="parameters"/>
</wsdl:message> 



<wsdl:portType name="mywsInterface">
    <wsdl:operation name="update">
        <wsdl:input message="tns:update" name="update"/>
        <wsdl:output message="tns:updateResponse" name="updateResponse"/>
    </wsdl:operation>
</wsdl:portType>


<wsdl:binding name="mywsPortBinding" type="tns:mywsInterface">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="update">
        <soap:operation soapAction="" style="document"/>
        <wsdl:input name="update">
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output name="updateResponse">
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

` 您可以找到更多详细信息和示例here