
The SOAP Gateway
The SOAP Gateway
Yet another alternative to
The biggest limitation of the SOAP protocol at present is that the specification uses XML element names to describe the member keys in structures. At present, using the default SOAP encoding such structures are the only way of representing a Python dictionary. The service agent framework already restricts keys in dictionaries to strings, but the SOAP protocol limits what values those keys can have because of the XML naming rules.
More specifically, XML says that an element name, and thus a key in a Python dictionary, cannot start with a number. Further to this, a key would not be able to contain white space, a whole host of punc- tuation characters, nor would a key be able to start with the string "xml" in any mix of upper or lower case. It is also not possible to represent an empty dictionary in SOAP. These amount to being quite a severe restriction and effectively means that dictionaries need to be converted into a list of key/value tuples in order to be sent correctly.
The Apache SOAP toolkit has defined an alternative compound type which would be suitable for rep- resenting a dictionary, but only a few SOAP toolkits actually support it. It is also questionable as to whether a SOAP client would interchangeable accept this new type in any place where a structure may appear. Inevitably, Microsoft and IBM will come up with yet another scheme for doing the same thing, so any consensus is likely to be long in coming.
At present the default SOAP gateway relies on a third party "ZSI" module from the "pywebsvcs" toolkit. To use the SOAP gateway, you will need to have separately obtained this third party module from "http://sourceforge.net/projects/pywebsvcs" and installed it. You must have version 1.2 RC2 or later of this package. It is not possible to use version 1.1 or earlier of this package because of bugs in the package.
If you still wish to use the SOAP gateway, the only real change you would need to make to your code would be to instantiate an instance of the SOAP gateway in place of the
import netsvc import netsvc.soap
dispatcher = netsvc.Dispatcher() dispatcher.monitor(signal.SIGINT)
validator = Validator()