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
