;; Author: Alexandru Harsanyi <AlexHarsanyi@gmail.com>
;; Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
;; Created: December, 2009
-;; Version: 3.1.3
+;; Version: 3.1.4
;; Keywords: soap, web-services, comm, hypermedia
;; Package: soap-client
;; Homepage: https://github.com/alex-hhh/emacs-soap-client
(anyType (soap-decode-any-type node))
(Array (soap-decode-array node))))))
+(defun soap-type-of (element)
+ "Return the type of ELEMENT."
+ ;; Support Emacs < 26 byte-code running in Emacs >= 26 sessions
+ ;; (Bug#31742).
+ (let ((type (type-of element)))
+ (if (eq type 'vector)
+ (aref element 0) ; For Emacs 25 and earlier.
+ type)))
+
;; Register methods for `soap-xs-basic-type'
-(let ((tag (aref (make-soap-xs-basic-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-basic-type))))
(put tag 'soap-attribute-encoder #'soap-encode-xs-basic-type-attributes)
(put tag 'soap-encoder #'soap-encode-xs-basic-type)
(put tag 'soap-decoder #'soap-decode-xs-basic-type))
(soap-decode-type type node)))
;; Register methods for `soap-xs-element'
-(let ((tag (aref (make-soap-xs-element) 0)))
+(let ((tag (soap-type-of (make-soap-xs-element))))
(put tag 'soap-resolve-references #'soap-resolve-references-for-xs-element)
(put tag 'soap-attribute-encoder #'soap-encode-xs-element-attributes)
(put tag 'soap-encoder #'soap-encode-xs-element)
(setf (soap-xs-attribute-reference attribute)
(soap-wsdl-get reference wsdl predicate)))))
-(put (aref (make-soap-xs-attribute) 0)
+(put (soap-type-of (make-soap-xs-attribute))
'soap-resolve-references #'soap-resolve-references-for-xs-attribute)
(defun soap-resolve-references-for-xs-attribute-group (attribute-group wsdl)
(setf (soap-xs-attribute-group-attribute-groups attribute-group)
(soap-xs-attribute-group-attribute-groups resolved))))))
-(put (aref (make-soap-xs-attribute-group) 0)
+(put (soap-type-of (make-soap-xs-attribute-group))
'soap-resolve-references #'soap-resolve-references-for-xs-attribute-group)
;;;;; soap-xs-simple-type
(soap-validate-xs-simple-type value type))))
;; Register methods for `soap-xs-simple-type'
-(let ((tag (aref (make-soap-xs-simple-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-simple-type))))
(put tag 'soap-resolve-references
#'soap-resolve-references-for-xs-simple-type)
(put tag 'soap-attribute-encoder #'soap-encode-xs-simple-type-attributes)
(soap-xs-complex-type-indicator type)))))
;; Register methods for `soap-xs-complex-type'
-(let ((tag (aref (make-soap-xs-complex-type) 0)))
+(let ((tag (soap-type-of (make-soap-xs-complex-type))))
(put tag 'soap-resolve-references
#'soap-resolve-references-for-xs-complex-type)
(put tag 'soap-attribute-encoder #'soap-encode-xs-complex-type-attributes)
function depending on the type of the ELEMENT.
If ELEMENT has no resolver function, it is silently ignored."
- (let ((resolver (get (aref element 0) 'soap-resolve-references)))
+ (let ((resolver (get (soap-type-of element) 'soap-resolve-references)))
(when resolver
(funcall resolver element wsdl))))
;; Install resolvers for our types
(progn
- (put (aref (make-soap-message) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-message)) 'soap-resolve-references
'soap-resolve-references-for-message)
- (put (aref (make-soap-operation) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-operation)) 'soap-resolve-references
'soap-resolve-references-for-operation)
- (put (aref (make-soap-binding) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-binding)) 'soap-resolve-references
'soap-resolve-references-for-binding)
- (put (aref (make-soap-port) 0) 'soap-resolve-references
+ (put (soap-type-of (make-soap-port)) 'soap-resolve-references
'soap-resolve-references-for-port))
(defun soap-wsdl-resolve-references (wsdl)
(cond ((listp type)
(catch 'done
(dolist (union-member type)
- (let* ((decoder (get (aref union-member 0)
+ (let* ((decoder (get (soap-type-of union-member)
'soap-decoder))
(result (ignore-errors
(funcall decoder
union-member node))))
(when result (throw 'done result))))))
(t
- (let ((decoder (get (aref type 0) 'soap-decoder)))
+ (let ((decoder (get (soap-type-of type) 'soap-decoder)))
(cl-assert decoder nil
- "no soap-decoder for %s type" (aref type 0))
+ "no soap-decoder for %s type"
+ (soap-type-of type))
(funcall decoder type node))))))))))
(defun soap-decode-any-type (node)
Attributes are inserted in the current buffer at the current
position."
- (let ((attribute-encoder (get (aref type 0) 'soap-attribute-encoder)))
+ (let ((attribute-encoder (get (soap-type-of type) 'soap-attribute-encoder)))
(cl-assert attribute-encoder nil
- "no soap-attribute-encoder for %s type" (aref type 0))
+ "no soap-attribute-encoder for %s type" (soap-type-of type))
(funcall attribute-encoder value type)))
(defun soap-encode-value (value type)
is to be encoded. This is a generic function which finds an
encoder function based on TYPE and calls that encoder to do the
work."
- (let ((encoder (get (aref type 0) 'soap-encoder)))
- (cl-assert encoder nil "no soap-encoder for %s type" (aref type 0))
+ (let ((encoder (get (soap-type-of type) 'soap-encoder)))
+ (cl-assert encoder nil "no soap-encoder for %s type" (soap-type-of type))
(funcall encoder value type))
(when (soap-element-namespace-tag type)
(add-to-list 'soap-encoded-namespaces (soap-element-namespace-tag type))))
This is a generic function, depending on TYPE a specific function
will be called."
- (let ((sample-value (get (aref type 0) 'soap-sample-value)))
+ (let ((sample-value (get (soap-type-of type) 'soap-sample-value)))
(if sample-value
(funcall sample-value type)
- (error "Cannot provide sample value for type %s" (aref type 0)))))
+ (error "Cannot provide sample value for type %s" (soap-type-of type)))))
(defun soap-sample-value-for-xs-basic-type (type)
"Provide a sample value for TYPE, an xs-basic-type.
(progn
;; Install soap-sample-value methods for our types
- (put (aref (make-soap-xs-basic-type) 0)
+ (put (soap-type-of (make-soap-xs-basic-type))
'soap-sample-value
'soap-sample-value-for-xs-basic-type)
- (put (aref (make-soap-xs-element) 0)
+ (put (soap-type-of (make-soap-xs-element))
'soap-sample-value
'soap-sample-value-for-xs-element)
- (put (aref (make-soap-xs-attribute) 0)
+ (put (soap-type-of (make-soap-xs-attribute))
'soap-sample-value
'soap-sample-value-for-xs-attribute)
- (put (aref (make-soap-xs-attribute) 0)
+ (put (soap-type-of (make-soap-xs-attribute))
'soap-sample-value
'soap-sample-value-for-xs-attribute-group)
- (put (aref (make-soap-xs-simple-type) 0)
+ (put (soap-type-of (make-soap-xs-simple-type))
'soap-sample-value
'soap-sample-value-for-xs-simple-type)
- (put (aref (make-soap-xs-complex-type) 0)
+ (put (soap-type-of (make-soap-xs-complex-type))
'soap-sample-value
'soap-sample-value-for-xs-complex-type)
- (put (aref (make-soap-message) 0)
+ (put (soap-type-of (make-soap-message))
'soap-sample-value
'soap-sample-value-for-message))
The buffer is populated with information about ELEMENT with links
to its sub elements. If ELEMENT is the WSDL document itself, the
entire WSDL can be inspected."
- (let ((inspect (get (aref element 0) 'soap-inspect)))
+ (let ((inspect (get (soap-type-of element) 'soap-inspect)))
(unless inspect
(error "Soap-inspect: no inspector for element"))
(progn
;; Install the soap-inspect methods for our types
- (put (aref (make-soap-xs-basic-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-basic-type)) 'soap-inspect
'soap-inspect-xs-basic-type)
- (put (aref (make-soap-xs-element) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-element)) 'soap-inspect
'soap-inspect-xs-element)
- (put (aref (make-soap-xs-simple-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-simple-type)) 'soap-inspect
'soap-inspect-xs-simple-type)
- (put (aref (make-soap-xs-complex-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-complex-type)) 'soap-inspect
'soap-inspect-xs-complex-type)
- (put (aref (make-soap-xs-attribute) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-attribute)) 'soap-inspect
'soap-inspect-xs-attribute)
- (put (aref (make-soap-xs-attribute-group) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-xs-attribute-group)) 'soap-inspect
'soap-inspect-xs-attribute-group)
- (put (aref (make-soap-message) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-message)) 'soap-inspect
'soap-inspect-message)
- (put (aref (make-soap-operation) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-operation)) 'soap-inspect
'soap-inspect-operation)
- (put (aref (make-soap-port-type) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-port-type)) 'soap-inspect
'soap-inspect-port-type)
- (put (aref (make-soap-binding) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-binding)) 'soap-inspect
'soap-inspect-binding)
- (put (aref (make-soap-port) 0) 'soap-inspect
+ (put (soap-type-of (make-soap-port)) 'soap-inspect
'soap-inspect-port)
- (put (aref (soap-make-wsdl "origin") 0) 'soap-inspect
+ (put (soap-type-of (soap-make-wsdl "origin")) 'soap-inspect
'soap-inspect-wsdl))
(provide 'soap-inspect)