WSDL-Content,binding: тип ввода отображается как литерал вместо имени сложного типа

Я развернул свой веб-сервис на 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>

Мой вопрос: почему типы ввода и вывода показаны как «буквальные»? В ответ этот веб-сервис отправляет обратно определенные данные в формате xml в соответствии с указанным xsd. Почему имя типа комплекса не отображается в wsdl вместо этого?


person saab    schedule 06.07.2016    source источник


Ответы (2)


В привязке "литерал" определяется только используемым стилем кодирования, сложное имя типа отображается в определении "wsdl:message", которое используется в "wsdl:operation" в "wsdl:portType".

У вас должно получиться что-то вроде этого. `

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

` Вы можете найти более подробную информацию и примеры здесь

person JH YANG    schedule 06.07.2016

В случае «буквального» определения абстрактного типа сами становятся конкретными определениями (они являются «буквальными» определениями). В этом случае вы можете просто просмотреть определения типа схемы XML, чтобы определить формат конкретного сообщения. Например, операция привязки документа/литерала выглядит на проводе следующим образом:

<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 просто содержит экземпляр элемента Add, определенного в схеме — это то, что делает документ/литерал таким привлекательным.

Ссылка: Знакомство с WSDL

person Mano ranjan J    schedule 06.07.2016