def replycomposite(self, rtypes, nodes):
dictionary = {}<EOL>for rt in rtypes:<EOL><INDENT>dictionary[rt.name] = rt<EOL><DEDENT>unmarshaller = self.unmarshaller()<EOL>composite = Factory.object('<STR_LIT>')<EOL>for node in nodes:<EOL><INDENT>tag = node.name<EOL>rt = dictionary.get(tag, None)<EOL>if rt is None:<EOL><INDENT>if node.get('<STR_LIT:id>') is None:<EOL><INDENT>raise Exception('<STR_LIT>' % tag)<EOL><DEDENT>else:<EOL><INDENT>continue<EOL><DEDENT><DEDENT>resolved = rt.resolve(nobuiltin=True)<EOL>sobject = unmarshaller.process(node, resolved)<EOL>value = getattr(composite, tag, None)<EOL>if value is None:<EOL><INDENT>if rt.unbounded():<EOL><INDENT>value = []<EOL>setattr(composite, tag, value)<EOL>value.append(sobject)<EOL><DEDENT>else:<EOL><INDENT>setattr(composite, tag, sobject)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if not isinstance(value, list):<EOL><INDENT>value = [value,]<EOL>setattr(composite, tag, value)<EOL><DEDENT>value.append(sobject)          <EOL><DEDENT><DEDENT>return composite<EOL>
Construct a I{composite} reply.  This method is called when it has been
detected that the reply has multiple root nodes.
@param rtypes: A list of known return I{types}.
@type rtypes: [L{suds.xsd.sxbase.SchemaObject},...]
@param nodes: A collection of XML nodes.
@type nodes: [L{Element},...]
@return: The I{unmarshalled} composite object.
@rtype: L{Object},...