def test_href(self): # the template. Start at pos 0, some servers complain if # xml tag is not in the first line. envelope_string = '''<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/" xmlns:types="http://example.com/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <tns:myResponse xsi:type="tns:myResponse"> <myResult href="#id1" /> </tns:myResponse> <soapenc:Array id="id1" soapenc:arrayType="tns:MyData[2]"> <Item href="#id2" /> <Item href="#id3" /> </soapenc:Array> <tns:MyData id="id2" xsi:type="tns:MyData"> <Machine xsi:type="xsd:string">somemachine</Machine> <UserName xsi:type="xsd:string">someuser</UserName> </tns:MyData> <tns:MyData id="id3" xsi:type="tns:MyData"> <Machine xsi:type="xsd:string">machine2</Machine> <UserName xsi:type="xsd:string">user2</UserName> </tns:MyData> </soap:Body> </soap:Envelope>''' root, xmlids = _parse_xml_string(envelope_string, 'utf8') header,payload = _from_soap(root, xmlids) # quick and dirty test href reconstruction self.assertEquals(len(payload[0]), 2)
def test_href(self): # the template. Start at pos 0, some servers complain if # xml tag is not in the first line. envelope_string = '''<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://tempuri.org/" xmlns:types="http://example.com/encodedTypes" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <tns:myResponse xsi:type="tns:myResponse"> <myResult href="#id1" /> </tns:myResponse> <soapenc:Array id="id1" soapenc:arrayType="tns:MyData[2]"> <Item href="#id2" /> <Item href="#id3" /> </soapenc:Array> <tns:MyData id="id2" xsi:type="tns:MyData"> <Machine xsi:type="xsd:string">somemachine</Machine> <UserName xsi:type="xsd:string">someuser</UserName> </tns:MyData> <tns:MyData id="id3" xsi:type="tns:MyData"> <Machine xsi:type="xsd:string">machine2</Machine> <UserName xsi:type="xsd:string">user2</UserName> </tns:MyData> </soap:Body> </soap:Envelope>''' root, xmlids = _parse_xml_string(envelope_string, 'utf8') header, payload = _from_soap(root, xmlids) # quick and dirty test href reconstruction self.assertEquals(len(payload[0]), 2)
def index_html(self, REQUEST, RESPONSE): """Handle an incoming SOAP request or a non-SOAP WSDL query.""" if REQUEST.get('SOAPXML', None) == None: # Not a SOAP Request, return WSDL return self.service_description(REQUEST, RESPONSE) try: # Deserialize the Body of the SOAP Request from soaplib.core._base import _from_soap header, payload = _from_soap(REQUEST.SOAPXML) # TODO: At this point I need dispatch method calls to the soaplib.Application # somehow....... :) ctx = MethodContext() content_type = cgi.parse_header(REQUEST.get("Content-Type")) charset = content_type[1].get('charset', None) length = REQUEST.get("Content-Length") http_payload = REQUEST.read(int(length)) if not charset: charset = "ascii" in_string = collapse_swa(content_type, http_payload) in_obj = self.soap_handler.get_in_object(ctx, in_string, charset) out_obj = self.soap_handler.get_out_object(ctx, in_obj) out_string = self.soap_handler.get_out_string(ctx, out_obj) return out_string except Exception, e: fault = Fault(faultstring=str(e)) resp = etree.tostring(fault, encoding=string_encoding) RESPONSE.setStatus('InternalServerError', reason=faultstring) RESPONSE.setHeader('Content-Type', 'text/xml') return resp
def index_html(self, REQUEST, RESPONSE): """Handle an incoming SOAP request or a non-SOAP WSDL query.""" if REQUEST.get('SOAPXML', None) == None: # Not a SOAP Request, return WSDL return self.service_description(REQUEST, RESPONSE) try: # Deserialize the Body of the SOAP Request from soaplib.core._base import _from_soap header, payload = _from_soap(REQUEST.SOAPXML) # TODO: At this point I need dispatch method calls to the soaplib.Application # somehow....... :) ctx = MethodContext() content_type = cgi.parse_header(REQUEST.get("Content-Type")) charset = content_type[1].get('charset',None) length = REQUEST.get("Content-Length") http_payload = REQUEST.read(int(length)) if not charset: charset = "ascii" in_string = collapse_swa(content_type, http_payload) in_obj = self.soap_handler.get_in_object(ctx, in_string, charset) out_obj = self.soap_handler.get_out_object(ctx, in_obj) out_string = self.soap_handler.get_out_string(ctx, out_obj) return out_string except Exception, e: fault = Fault(faultstring=str(e)) resp = etree.tostring(fault, encoding=string_encoding) RESPONSE.setStatus('InternalServerError', reason=faultstring) RESPONSE.setHeader('Content-Type', 'text/xml') return resp