From b478073d112ec87f3f4693b6fafef42bffcaaf1d Mon Sep 17 00:00:00 2001 From: Tianhao He Date: Mon, 9 Nov 2015 13:03:09 -0800 Subject: [PATCH] Added this logic to avoid KeyError fault during Exception deserialization when SoapAdapter is used at client side. This would happen when prefix doesn't exist in nsMap. --- pyVmomi/SoapAdapter.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pyVmomi/SoapAdapter.py b/pyVmomi/SoapAdapter.py index 4afba66..9683e5c 100644 --- a/pyVmomi/SoapAdapter.py +++ b/pyVmomi/SoapAdapter.py @@ -505,12 +505,7 @@ class ExpatDeserializerNSHandlers: ## Get current default ns def GetCurrDefNS(self): - namespaces = self.nsMap.get(None) - if namespaces: - ns = namespaces[-1] - else: - ns = "" - return ns + return self._GetNamespaceFromPrefix() ## Get namespace and wsdl name from tag def GetNSAndWsdlname(self, tag): @@ -521,9 +516,17 @@ class ExpatDeserializerNSHandlers: else: prefix, name = None, tag # Map prefix to ns - ns = self.nsMap[prefix][-1] + ns = self._GetNamespaceFromPrefix(prefix) return ns, name + def _GetNamespaceFromPrefix(self, prefix = None): + namespaces = self.nsMap.get(prefix) + if namespaces: + ns = namespaces[-1] + else: + ns = "" + return ns + ## Handle namespace begin def StartNamespaceDeclHandler(self, prefix, uri): namespaces = self.nsMap.get(prefix)