On Friday 16 April 2010 9:06:14 am Andrea Poli wrote:
> Hi,
> 
> I need some explanation about the wsdl validator and wsdl2java generator
> tools (cxf/bin). The tool wsdlvalidator generate error for a Document
> Literal's style WSDL that isn't compatible with Basic Profile 1.1
> standard.
> 
> I have the message:
> <soap:envelope>
>      <soap:body>
>          <xElement>5</xElement>
>          <yElement>5.0</yElement>
>      </soap:body>
> </soap:envelope>
> 
> A WSDL for such message can be written in three ways (see the end of the
> mail for the samples)
> 
> Here are some BP1.1 statements (4.4.1 Bindings and Parts):
> a. "R2201 A document-literal binding in a DESCRIPTION MUST, in each of
> its soapbind:body element(s), have at most one part listed in the parts
> attribute, if the parts attribute is specified."
> b. "R2210 If a document-literal binding in a DESCRIPTION does not
> specify the parts attribute on a soapbind:body element, the
> corresponding abstract wsdl:message MUST define zero or one wsdl:parts."
> c. "For document-literal bindings, the Profile requires that at most one
> part, abstractly defined with the element attribute, be serialized into
> the soap:Body element."
> 
> It's not clear if an envelope with more children in Body Part is BP1.1
> compliant, because:
> WSDL Sample 1: WSI-BP-1.1 R2210 violation
> WSDL Sample 2: WSI-BP-1.1 R2201 violation
> WSDL Sample 3: doesn't violate any rule, but it's not compliant with "c"
> statement.

Actually, it does violate the WSDL spec.   The wsdl spec only allows a single 
soap:body element as a child to wsdl:input.   Thus, it's still invalid.  The 
wsdl validator probably should pick that up.

If you look at:
http://www.w3.org/TR/wsdl#_soap:body

There isn't a little * after the soap:body def there that would allow multiple 
elements.   As an example of one that would, look at the soap:header:
http://www.w3.org/TR/wsdl#_soap:header


> Could you confirm (or not) wsdl sample 3 (and its generated message) is
> WSI-BP-1.1 compliant?

It's not.   The soap message should have a single child element of soap:body.


> It's correct that wsdl tools (cxf/bin/wsdl2java and cxf/bin/wsdlvalidator)
> accept WSDL Sample 3 ?

Nope.



Dan



> 
> Andrea Poli
> 
> 
> 
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> WSDL Sample 1. Attribute parts not defined in soap:body
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> <wsdl:definitions>
>      ...
>      xsd definition for types:xElement and types:yElement
>      ...
>      <wsdl:message name="operationMsg">
>          <wsdl:part element="types:xElement" name="param"/>
>          <wsdl:part element="types:yElement" name="param2"/>
>      </wsdl:message>
>      ....
>      <wsdl:portType name="service">
>          <wsdl:operation name="operation">
>              <wsdl:input message="ns:operationMsg" name="operationMsg"/>
>              .....
>          </wsdl:operation>
>          .....
>      </wsdl:portType>
>      <wsdl:binding name="serviceBinding" type="ns:service">
> 
>          <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> 
>          <wsdl:operation name="operation">
>              ...
>              <wsdl:input name="operationMsg">
> *                 <soap:body use="literal"/>*
>              </wsdl:input>
>              ....
>          </wsdl:operation>
>      ...
>      </wsdl:binding>
>      ....
> </wsdl:definitions>
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> 
> 
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> WSDL Sample 2. Attribute parts defined in one soap:body element
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> <wsdl:definitions>
>      ...
>      xsd definition for types:xElement and types:yElement
>      ...
>      <wsdl:message name="operationMsg">
>          <wsdl:part element="types:xElement" name="param"/>
>          <wsdl:part element="types:yElement" name="param2"/>
>      </wsdl:message>
>      ....
>      <wsdl:portType name="service">
>          <wsdl:operation name="operation">
>              <wsdl:input message="ns:operationMsg" name="operationMsg"/>
>              .....
>          </wsdl:operation>
>          .....
>      </wsdl:portType>
>      <wsdl:binding name="serviceBinding" type="ns:service">
> 
>          <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> 
>          <wsdl:operation name="operation">
>              ...
>              <wsdl:input name="operationMsg">
> *                 <soap:body parts="param param2" use="literal"/>*
>              </wsdl:input>
>              ....
>          </wsdl:operation>
>      ...
>      </wsdl:binding>
>      ....
> </wsdl:definitions>
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> 
> 
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> WSDL Sample 3. Attribute parts defined in two soap:body element
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------
> <wsdl:definitions>
>      ...
>      xsd definition for types:xElement and types:yElement
>      ...
>      <wsdl:message name="operationMsg">
>          <wsdl:part element="types:xElement" name="param"/>
>          <wsdl:part element="types:yElement" name="param2"/>
>      </wsdl:message>
>      ....
>      <wsdl:portType name="service">
>          <wsdl:operation name="operation">
>              <wsdl:input message="ns:operationMsg" name="operationMsg"/>
>              .....
>          </wsdl:operation>
>          .....
>      </wsdl:portType>
>      <wsdl:binding name="serviceBinding" type="ns:service">
> 
>          <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> 
>          <wsdl:operation name="operation">
>              ...
>              <wsdl:input name="operationMsg">
> *               <soap:body parts="param" use="literal"/>
>               <soap:body parts="param2" use="literal"/>*
>              </wsdl:input>
>              ....
>          </wsdl:operation>
>      ...
>      </wsdl:binding>
>      ....
> </wsdl:definitions>
> ---------------------------------------------------------------------------
> ---------------------------------------------------------------------------

-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog

Reply via email to