@classmethod
def parse(cls, definitions, xmlelement, operation, type, nsmap):
    """Parse a wsdl:binding/wsdl:operation/wsdl:operation for the SOAP
        implementation.

        Each wsdl:operation can contain three child nodes:
         - input
         - output
         - fault

        Definition for input/output::

          <input>
            <soap:body parts="nmtokens"? use="literal|encoded"
                       encodingStyle="uri-list"? namespace="uri"?>

            <soap:header message="qname" part="nmtoken" use="literal|encoded"
                         encodingStyle="uri-list"? namespace="uri"?>*
              <soap:headerfault message="qname" part="nmtoken"
                                use="literal|encoded"
                                encodingStyle="uri-list"? namespace="uri"?/>*
            </soap:header>
          </input>

        And the definition for fault::

           <soap:fault name="nmtoken" use="literal|encoded"
                       encodingStyle="uri-list"? namespace="uri"?>

        """
    name = xmlelement.get('name')
    obj = cls(definitions.wsdl, name, operation, nsmap=nsmap, type=type)
    body_data = None
    header_data = None
    body = xmlelement.find('soap:body', namespaces=operation.binding.nsmap)
    if body is not None:
        body_data = cls._parse_body(body)
    elements = xmlelement.findall('soap:header', namespaces=operation.
        binding.nsmap)
    header_data = cls._parse_header(elements, definitions.target_namespace,
        operation)
    obj._resolve_info = {'body': body_data, 'header': header_data}
    return obj
