Function: soap-parse-operation

soap-parse-operation is a byte-compiled function defined in soap-client.el.gz.

Signature

(soap-parse-operation NODE)

Documentation

Parse NODE as a wsdl:operation and return the corresponding type.

Source Code

;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-parse-operation (node)
  "Parse NODE as a wsdl:operation and return the corresponding type."
  (cl-assert (eq (soap-l2wk (xml-node-name node)) 'wsdl:operation)
             nil
             "expecting wsdl:operation node, got %s"
             (soap-l2wk (xml-node-name node)))
  (let ((name (xml-get-attribute node 'name))
        (parameter-order (split-string
                          (xml-get-attribute node 'parameterOrder)))
        input output faults input-action output-action)
    (dolist (n (xml-node-children node))
      (when (consp n)                 ; skip string nodes which are whitespace
        (let ((node-name (soap-l2wk (xml-node-name n))))
          (cond
           ((eq node-name 'wsdl:input)
            (let ((message (xml-get-attribute n 'message))
                  (name (xml-get-attribute n 'name))
                  (action (soap-xml-get-attribute-or-nil1 n 'wsaw:Action)))
              (setq input (cons name (soap-l2fq message 'tns)))
              (setq input-action action)))
           ((eq node-name 'wsdl:output)
            (let ((message (xml-get-attribute n 'message))
                  (name (xml-get-attribute n 'name))
                  (action (soap-xml-get-attribute-or-nil1 n 'wsaw:Action)))
              (setq output (cons name (soap-l2fq message 'tns)))
              (setq output-action action)))
           ((eq node-name 'wsdl:fault)
            (let ((message (xml-get-attribute n 'message))
                  (name (xml-get-attribute n 'name)))
              (push (cons name (soap-l2fq message 'tns)) faults)))))))
    (make-soap-operation
     :name name
     :namespace-tag soap-target-xmlns
     :parameter-order parameter-order
     :input input
     :output output
     :faults (nreverse faults)
     :input-action input-action
     :output-action output-action)))