суббота, 3 ноября 2012 г.

WSDL is containing document/literal operations which does not conform with WS-I Basic Profile 1.0 R2204


При деплое (deploy)  компонента содержащего Web Service (sda, sca и тд), может возникнуть ошибка  "WSDL is containing document/literal operations which does not conform with WS-I Basic Profile 1.0 R2204."

О чем же говорит эта ошибка и как ее побороть? 


Для начала давайте разберемся что за зверь такой "WS-I Basic Profile 1.0". WS-I Basic Profile 1.0 - это документ, который содержит спецификации WS, а также разъясняет их. Найти и посмотреть документ можно здесь -http://www.ws-i.org/

В этом документе есть пунк R2204, который относится к разделу "5.3.1 Bindings and Parts".


R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute.

где, 


DESCRIPTION - descriptions of types, messages, interfaces and their concrete protocol and data format bindings, and the network access points associated with Web services (e.g., WSDL descriptions).


Это означает, что, если Вы используете стиль Document/literal для элементов soap:body (soap:body use="literal"),то для каждого из них должен быть определен wsdl:part с аттрибутом element (не type). Вы НЕ МОЖЕТЕ сделать ссылку на тип, Вы ДОЛЖНЫ ссылаться на элемент.

Пример:
...
  <wsdl:binding name="startSOAP" type="tns:start">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Start">
      <soap:operation soapAction="http://example.kz/start/Start"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
..
Это будет ошибка:
...
  <wsdl:message name="StartRequest">
    <wsdl:part name="in" type="xsd:long" />
  </wsdl:message>
  <wsdl:message name="StartResponse">
    <wsdl:part name="out" element="tns:NewOperation"/>
  </wsdl:message>
...

Корректно:
...

 <wsdl:message name="StartRequest">
    <wsdl:part name="in" element="xsd1:header" />
  </wsdl:message>
  <wsdl:message name="StartResponse">
    <wsdl:part name="out" element="tns:NewOperation"/>
  </wsdl:message>
...
где "xsd1:header" и "tns:NewOperation" ссылка на элементы xsd из  <wsdl : types>


Комментариев нет:

Отправить комментарий