'Process the I{reply} for the specified I{method} by sax parsing the I{reply}
and then unmarshalling into python object(s).
@param method: The name of the invoked method.
@type method: str
@param reply: The reply XML received after invoking the specified method.
@type reply: str
@return: The unmarshalled reply.  The returned value is an L{Object} for a
I{list} depending on whether the service returns a single object or a
collection.
@rtype: tuple ( L{Element}, L{Object} )'

def get_reply(self, method, reply):

    reply = self.replyfilter(reply)
    sax = Parser()
    replyroot = sax.parse(string=reply)
    plugins = PluginContainer(self.options().plugins)
    plugins.message.parsed(reply=replyroot)
    soapenv = replyroot.getChild('Envelope')
    soapenv.promotePrefixes()
    soapbody = soapenv.getChild('Body')
    self.detect_fault(soapbody)
    soapbody = self.multiref.process(soapbody)
    nodes = self.replycontent(method, soapbody)
    rtypes = self.returned_types(method)
    if (len(rtypes) > 1):
        result = self.replycomposite(rtypes, nodes)
        return (replyroot, result)
    if (len(rtypes) == 1):
        if rtypes[0].unbounded():
            result = self.replylist(rtypes[0], nodes)
            return (replyroot, result)
        if len(nodes):
            unmarshaller = self.unmarshaller()
            resolved = rtypes[0].resolve(nobuiltin=True)
            result = unmarshaller.process(nodes[0], resolved)
            return (replyroot, result)
    return (replyroot, None)
