[cl-soap-cvs] CVS update: cl-soap/src/wsdl.lisp

Sven Van Caekenberghe scaekenberghe at common-lisp.net
Mon Sep 26 10:52:45 UTC 2005


Update of /project/cl-soap/cvsroot/cl-soap/src
In directory common-lisp.net:/tmp/cvs-serv22402/src

Modified Files:
	wsdl.lisp 
Log Message:
renamed bind-header to bind-input-headers
now using bind-element in bind-input-headers

Date: Mon Sep 26 12:52:45 2005
Author: scaekenberghe

Index: cl-soap/src/wsdl.lisp
diff -u cl-soap/src/wsdl.lisp:1.16 cl-soap/src/wsdl.lisp:1.17
--- cl-soap/src/wsdl.lisp:1.16	Mon Sep 26 12:41:50 2005
+++ cl-soap/src/wsdl.lisp	Mon Sep 26 12:52:45 2005
@@ -1,6 +1,6 @@
 ;;;; -*- mode: lisp -*-
 ;;;;
-;;;; $Id: wsdl.lisp,v 1.16 2005/09/26 10:41:50 scaekenberghe Exp $
+;;;; $Id: wsdl.lisp,v 1.17 2005/09/26 10:52:45 scaekenberghe Exp $
 ;;;;
 ;;;; The basic WSDL protocol: we parse the generic and soap specific parts
 ;;;;
@@ -421,25 +421,18 @@
                   (t (error "Cannot resolve input binding ~a:~a" (get-name input-message) (get-name part))))))
     (nreverse actual-input-parameters)))
 
-(defun bind-headers (soap-input-headers headers wsdl-document-definitions)
-  ;; default namespace!
+(defun bind-input-headers (soap-input-headers headers wsdl-document-definitions)
   (let ((actual-headers '()))
     (loop :for part :in soap-input-headers :do
-          (let* ((value (get-name-binding (get-name part) headers))
-                 (element (get-element-named wsdl-document-definitions (get-element part)))
-                 (type (get-element-type (get-xml-schema-definition wsdl-document-definitions)
-                                         (get-name element))))
-            (if value
-                (push `(,(intern (get-name part) :keyword)
-                        ,(if (xsd-primitive-type-name-p type)
-                             (lisp->xsd-primitive value (intern-xsd-type-name type))
-                           (error "Non-primitive header type ~a not allowed" type)))
-                      actual-headers)
-              (error "No input header binding found for ~a" (get-name part)))))
+          (let* ((element (get-element part))
+                 (namespace (s-xml:find-namespace (get-target-namespace wsdl-document-definitions)))
+                 (xml-schema-definition (get-xml-schema-definition wsdl-document-definitions))
+                 (binding (bind-element element headers xml-schema-definition namespace)))
+            (when binding
+              (push binding actual-headers))))
     (nreverse actual-headers)))
 
 (defun bind-output-parts (result output-message output wsdl-document-definitions)
-  ;; namespaces!
   (declare (ignore output))
   (let ((namespace (s-xml:find-namespace (get-target-namespace wsdl-document-definitions)))
         (result-values '()))
@@ -488,7 +481,7 @@
       (error "The case where input and output namespaces differ is not yet supported"))
     (multiple-value-bind (result headers)
         (soap-call soap-end-point
-                   (bind-headers soap-input-headers headers wsdl-document-definitions)
+                   (bind-input-headers soap-input-headers headers wsdl-document-definitions)
                    ;; we assume there is only one parameter
                    (first (bind-input-parts input-message input wsdl-document-definitions))
                    :soap-action soap-action
@@ -532,14 +525,12 @@
             (error "Expected <~a> element" output-wrapper)))))))
 
 (defun wsdl-soap-input-headers (wsdl-document-definitions binding-operation-input)
-  (let ((soap-input-headers (get-extensions-of-class binding-operation-input 'wsdl-soap-header))
-        (parts '()))
-    (loop :for soap-input-header :in soap-input-headers :do
-          (let* ((part-name (get-part soap-input-header))
-                 (header-message (get-message-named wsdl-document-definitions (get-message soap-input-header))))
-            (push (get-part-named header-message part-name)
-                  parts)))
-    (nreverse parts)))
+  (let ((soap-input-headers (get-extensions-of-class binding-operation-input 'wsdl-soap-header)))
+    (loop :for soap-input-header :in soap-input-headers 
+          :collect (let* ((part-name (get-part soap-input-header))
+                          (message-name (get-message soap-input-header))
+                          (header-message (get-message-named wsdl-document-definitions message-name)))
+                     (get-part-named header-message part-name)))))
 
 (defun wsdl-soap-call-internal (wsdl-document-definitions
                                 port




More information about the Cl-soap-cvs mailing list