Hints for various WS-I problems:
--------------------------------
1) For the WSI failure with assertion WSI2102, check to see if you are
importing the soap encoding definitions. Since only rpc/literal and
document/literal are permitted, these definitions are not needed.
Remove lines like:
2) Clearly, do NOT define types in terms of soap-encoded types. This
will likely show up as violations of WSI2417.
3) All wsdlsoap:fault elements must have the name attribute
specified. Use the name of the enclosing wsdl:fault element. This
will show up as problems WSI2703, WSI2022 and WSI2032.
4) All faults must be defined in terms of XML schema elements. Change
type attributes to element attributes in wsdl:message elements.
Define an element in terms of the exception type. This fixes WSI2113.
5) Define arrays in terms of elements with minOccurs and maxOccurs
attributes specified. This fixes WSI2108.
Recommendations:
----------------
1) Supply a name attribute on the wsdl:definitions element. This is
used by the WSDLDoc generator. If not supplied WSDLDoc will use the
unhelpful name 'NoName' which may also then be overwritten by the
content of other unnamed wsdl files.
2) For document/literal WSDL specifications name the XML schema
element referenced by an operation (through a message element) the
same as the operation itself. This is the only requirement of
document/wrapped which isn't enforced by the WS-I requirements.
Note that document/wrapped is a valid document/literal definition.
3) Faults must reference an element in the XML schema because it is
treated as a "literal" component. However do define a type hierarchy
of faults so that these can be mapped more naturally into exceptions
for the languages which support them. I.e.,
Remember to specify at least one new extension element or to repeat
all of the existing elements, otherwise the type will be empty (and
gSoap will complain).
Limitations from Python bindings:
---------------------------------
1) Do NOT define anonymous simpleContent enumerations. Instead define
explicit simpleTypes. I.e. do NOT do:
But instead define an explicit type:
This is also cleaner and simplier to understand.
2) The targetNamespace attribute must appear on all xsd:schema
elements. Leaving this off causes a "Key error: 'targetNamespace'"
when using SOAPpy.
3) The targetNamespace of an enclosing xsd:schema element must be
different than the namespace attribute on any xsd:import element.
SOAPpy does not allow the redefinition of types within a namespace
that are imported. This restriction also appears in .NET.
Limitations from gSoap:
-----------------------
1) All XML schema definitions in a single namespace MUST be declared
withing a single xsd:schema element when using document/literal
encoding. If definitions are split between different xsd:schema
elements, then gsoap will generate warnings about not being able to
find the various elements.
2) Empty messages in document/literal must be written as
otherwise gSoap will complain that it cannot find the given type.