Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

rpclib-2.6.0 commits #122

Merged
merged 30 commits into from

1 participant

@plq
Owner

HttpRpc now supports parsing POST Requests, thanks to werkzeug, among many other fixes and small improvements.

plq and others added some commits
@plq plq latest WS-I test results aa3365c
@plq plq add mandatory unsignedinteger type 2e61fb8
@plq plq fix backwards-incompatible validator argument in XmlObject c73e047
@plq plq utf8 -> UTF-8 8a07943
@plq plq not-so-important refactoring 58a282a
@plq plq avoid inheritance hierarchies for simpleTypes. 50faf38
@plq plq make static files directory that the twisted wrapper publishes dynamic 1ec6af5
@plq plq use werkzeug to parse HTTP POST data. 41c7e72
@plq plq remove now needless empty input check. 882f358
@plq plq ByteArray is now effectively a primitive. e119d7d
@plq plq version and changelog update. 34f45ba
@plq plq separated call handle and method context generation. 8daa470
@plq plq Merge branch 'http-post' d27779f
@plq plq changelog update 194b927
@plq plq pep8 tweaks 6e7c9d4
@plq plq instead of initializing every known instance property as None, Comple…
…xModel default ctor now deletes data from class properties and sets only what it's passed to as **kwargs.
14a66ec
@plq plq fix old class definition in sqlalchemy example. 5300b81
@plq plq move logic in context dtor to event handler. 875baab
@plq plq add method_request_string to XmlObject logger.debug line. 84aab05
Burak Arslan Add werkzeug to requirements in README.rst 5c5bceb
@plq plq handle missing Content-Type header #119 c013c34
@plq plq lowercase encoding name. #119 9371104
@plq plq readme update, fix funny typo :) 17a323f
@plq plq add RequestNotAllowed error. #119 7b85907
@plq plq have rpclib return the relevant HTTP error on RequestNotAllowed excep…
…tion. #119
1f90db8
@plq plq handle incorrect soap request for http transport. #119 990f74a
@plq plq implement _force_own_namespace 11ce8de
@plq plq fix race condition in wsgi server wsdl request. bc983b4
@plq plq changelog update. e86ed0c
@plq plq readme update 9a0e28e
@plq plq merged commit 72ebdd9 into arskom:master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 15, 2012
  1. @plq

    latest WS-I test results

    plq authored
Commits on Jan 17, 2012
  1. @plq

    add mandatory unsignedinteger type

    plq authored
Commits on Jan 24, 2012
  1. @plq
Commits on Jan 25, 2012
  1. @plq

    utf8 -> UTF-8

    plq authored
Commits on Jan 27, 2012
  1. @plq

    not-so-important refactoring

    plq authored
Commits on Jan 28, 2012
  1. @plq
Commits on Jan 29, 2012
  1. @plq
  2. @plq
  3. @plq
  4. @plq
Commits on Jan 30, 2012
  1. @plq

    version and changelog update.

    plq authored
  2. @plq
  3. @plq

    Merge branch 'http-post'

    plq authored
Commits on Feb 12, 2012
  1. @plq

    changelog update

    plq authored
  2. @plq

    pep8 tweaks

    plq authored
  3. @plq

    instead of initializing every known instance property as None, Comple…

    plq authored
    …xModel default ctor now deletes data from class properties and sets only what it's passed to as **kwargs.
  4. @plq
  5. @plq
  6. @plq
  7. @plq

    Add werkzeug to requirements in README.rst

    Burak Arslan authored plq committed
  8. @plq
  9. @plq

    lowercase encoding name. #119

    plq authored
  10. @plq

    readme update, fix funny typo :)

    plq authored
  11. @plq

    add RequestNotAllowed error. #119

    plq authored
  12. @plq
  13. @plq
  14. @plq

    implement _force_own_namespace

    plq authored
  15. @plq
  16. @plq

    changelog update.

    plq authored
  17. @plq

    readme update

    plq authored
This page is out of date. Refresh to see the latest.
View
9 CHANGELOG.rst
@@ -2,6 +2,15 @@
Changelog
=========
+rpclib-2.6.0-beta
+-----------------
+ * HttpRpc now parses POST/PUT/PATCH bodies, can accept file uploads.
+ Uses werkzeug to do that, which is now a soft dependency.
+ * ByteArray now child of SimpleModel. It's now possible to customize it simply
+ by calling it.
+ * Fix race condition in wsgi server wsdl request.
+ * Full change log: https://github.com/arskom/rpclib/pull/122
+
rpclib-2.5.2-beta
-----------------
* Misc. fixes.
View
5 README.rst
@@ -57,7 +57,10 @@ that Rpclib supports:
:class:`rpclib.client.zeromq.ZeroMQClient` and
:class:`rpclib.server.zeromq.ZeroMQServer`.
* A Wsgi server of your choice to wrap :class:`rpclib.server.wsgi.WsgiApplication`.
-* `Werkzeug <http://werkzeug.pocoo.org/>` is needed for :class:`rpclib.protocol.http.HttpSoap`.
+* `Werkzeug <http://werkzeug.pocoo.org/>` is needed for :class:`rpclib.protocol.http.HttpRpc`.
+
+You are advised to add these as requirements to your own projects, as these are
+only "soft" dependencies of rpclib, thus not handled in its setup script.
Installing
==========
View
8 examples/user_manager/server_sqlalchemy.py
@@ -76,7 +76,7 @@ class User(TableModel, DeclarativeBase):
# this is the same as the above user object. Use this method of declaring
# objects for tables that have to be defined elsewhere.
-class AlternativeUser(TableSerializer, DeclarativeBase):
+class AlternativeUser(TableModel, DeclarativeBase):
__namespace__ = 'rpclib.examples.user_manager'
__table__ = User.__table__
@@ -108,16 +108,12 @@ class UserDefinedContext(object):
def __init__(self):
self.session = Session()
- def __del__(self):
- self.session.close()
-
def _on_method_call(ctx):
ctx.udc = UserDefinedContext()
def _on_method_return_object(ctx):
- # we don't do this in UserDefinedContext.__del__ simply to be able to alert
- # the client in case the commit fails.
ctx.udc.session.commit()
+ ctx.udc.session.close()
application = Application([UserManagerService], 'rpclib.examples.user_manager',
interface=Wsdl11(), in_protocol=Soap11(), out_protocol=Soap11())
View
2  src/rpclib/__init__.py
@@ -17,7 +17,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
#
-__version__ = '2.5.2-beta'
+__version__ = '2.6.0-beta'
from rpclib._base import TransportContext
from rpclib._base import EventContext
View
6 src/rpclib/decorator.py
@@ -158,11 +158,13 @@ def explain_method(*args, **kwargs):
_no_ctx = kparams.get('_no_ctx', True)
_udp = kparams.get('_udp', None)
+ _faults = None
if ('_faults' in kparams) and ('_throws' in kparams):
raise ValueError("only one of '_throws ' and '_faults' arguments"
"should be given, as they're synonyms.")
- _faults = kparams.get('_faults', None)
- if _faults is None:
+ elif '_faults' in kparams:
+ _faults = kparams.get('_faults', None)
+ elif '_throws' in kparams:
_faults = kparams.get('_throws', None)
_in_message_name = kparams.get('_in_message_name', function_name)
View
9 src/rpclib/error.py
@@ -8,12 +8,17 @@ def __init__(self, faultstring="Requested resource not found"):
class RequestTooLongError(Fault):
"""Raised when the request is too long."""
- def __init__(self, faultstring):
+ def __init__(self, faultstring=""):
Fault.__init__(self, 'Client.RequestTooLong', faultstring)
+class RequestNotAllowed(Fault):
+ """Raised when the request is incomplete."""
+ def __init__(self, faultstring=""):
+ Fault.__init__(self, 'Client.RequestNotAllowed', faultstring)
+
class ArgumentError(Fault):
"""Raised when there is a general problem with input data."""
- def __init__(self, faultstring):
+ def __init__(self, faultstring=""):
Fault.__init__(self, 'Client.ArgumentError', faultstring)
class ValidationError(Fault):
View
4 src/rpclib/interface/_base.py
@@ -145,7 +145,9 @@ def populate_interface(self, types=None):
# populate types
for s in self.services:
- logger.debug("populating '%s.%s (%s) ' types..." % (s.__module__, s.__name__, s.get_service_key()))
+ logger.debug("populating '%s.%s (%s) ' types..." % (s.__module__,
+ s.__name__, s.get_service_key()))
+
for method in s.public_methods.values():
if method.in_header is None:
method.in_header = s.__in_header__
View
3  src/rpclib/interface/xml_schema/model/_base.py
@@ -33,8 +33,7 @@ def simple_get_restriction_tag(interface, cls):
restriction.set('base', cls.__base_type__.get_type_name_ns(interface))
for v in cls.Attributes.values:
- enumeration = etree.SubElement(restriction,
- '{%s}enumeration' % _ns_xsd)
+ enumeration = etree.SubElement(restriction, '{%s}enumeration' % _ns_xsd)
enumeration.set('value', str(v))
return restriction
View
14 src/rpclib/model/_base.py
@@ -95,6 +95,8 @@ class Annotations(object):
class Empty(object):
pass
+ _force_own_namespace = set()
+
@staticmethod
def is_default(cls):
return True
@@ -136,6 +138,9 @@ def resolve_namespace(cls, default_ns):
if cls.__namespace__ is None:
cls.__namespace__ = cls.__module__
+ for c in cls._force_own_namespace:
+ c.__namespace__ = cls.__namespace__
+
@classmethod
def get_type_name(cls):
"""Returns the class name unless the __type_name__ attribute is defined.
@@ -234,6 +239,7 @@ def validate_native(cls, value):
"""Override this method to do your own input validation on the native
value. This is called after converting the incoming string to the
native python value."""
+
return True
class Null(ModelBase):
@@ -267,7 +273,11 @@ def __new__(cls, **kwargs):
retval = cls.customize( ** kwargs)
if not retval.is_default(retval):
- retval.__base_type__ = cls
+ if hasattr(cls, '_is_clone_of'):
+ retval.__base_type__ = cls._is_clone_of
+ else:
+ retval.__base_type__ = cls
+
retval.__type_name__ = kwargs.get("type_name", ModelBase.Empty)
return retval
@@ -278,7 +288,7 @@ def is_default(cls):
@staticmethod
def validate_string(cls, value):
- return ( ModelBase.validate_string(cls, value)
+ return ( ModelBase.validate_string(cls, value)
and (len(cls.Attributes.values) == 0 or
value in cls.Attributes.values)
)
View
3  src/rpclib/model/binary.py
@@ -29,9 +29,10 @@
from rpclib.model import nillable_string
from rpclib.model import nillable_iterable
from rpclib.model import ModelBase
+from rpclib.model import SimpleModel
-class ByteArray(ModelBase):
+class ByteArray(SimpleModel):
"""Handles anything other than ascii or unicode-encoded data. Every protocol
has a different way to handle arbitrary data. E.g. xml-based protocols
encode this as base64, while HttpRpc just hands it over.
View
10 src/rpclib/model/complex.py
@@ -151,11 +151,17 @@ class ComplexModelBase(ModelBase):
from.
"""
- def __init__(self, ** kwargs):
+ def __init__(self, **kwargs):
super(ComplexModelBase, self).__init__()
for k in self.get_flat_type_info(self.__class__).keys():
- setattr(self, k, kwargs.get(k, None))
+ try:
+ delattr(self, k)
+ except:
+ pass
+
+ for k,v in kwargs.items():
+ setattr(self, k, v)
def __len__(self):
return len(self._type_info)
View
1  src/rpclib/model/primitive.py
@@ -554,3 +554,4 @@ class Mandatory(object):
String = String(type_name="mandatory_string", min_occurs=1, nillable=False, min_len=1)
Integer = Integer(type_name="mandatory_integer", min_occurs=1, nillable=False)
+ UnsignedInteger = UnsignedInteger(type_name="mandatory_unsigned_integer", min_occurs=1, nillable=False)
View
33 src/rpclib/protocol/_base.py
@@ -34,11 +34,13 @@
from rpclib.const.http import HTTP_400
from rpclib.const.http import HTTP_404
+from rpclib.const.http import HTTP_405
from rpclib.const.http import HTTP_413
from rpclib.const.http import HTTP_500
from rpclib.error import ResourceNotFoundError
from rpclib.error import RequestTooLongError
+from rpclib.error import RequestNotAllowed
from rpclib.error import Fault
class ProtocolBase(object):
@@ -142,19 +144,9 @@ def set_method_descriptor(self, ctx):
raise ResourceNotFoundError('Method %r not found.' % name)
def generate_method_contexts(self, ctx):
- """Method to be overriden to perform any sort of custom matching between
- the method_request_string and the methods. Returns a list of contexts.
- Can return multiple contexts if a method_request_string matches more
- than one function. (This is called the fanout mode.)
- """
-
- name = ctx.method_request_string
- if not name.startswith("{"):
- name = '{%s}%s' % (self.app.interface.get_tns(), name)
-
- call_handles = self.app.interface.service_method_map.get(name, [])
+ call_handles = self.get_call_handles(ctx)
if len(call_handles) == 0:
- raise ResourceNotFoundError('Method %r not found.' % name)
+ raise ResourceNotFoundError('Method %r not found.' % ctx.method_request_string)
retval = []
for sc, d in call_handles:
@@ -169,11 +161,28 @@ def generate_method_contexts(self, ctx):
return retval
+ def get_call_handles(self, ctx):
+ """Method to be overriden to perform any sort of custom method mapping
+ using any data in the method context. Returns a list of contexts.
+ Can return multiple contexts if a method_request_string matches more
+ than one function. (This is called the fanout mode.)
+ """
+
+ name = ctx.method_request_string
+ if not name.startswith("{"):
+ name = '{%s}%s' % (self.app.interface.get_tns(), name)
+
+ call_handles = self.app.interface.service_method_map.get(name, [])
+
+ return call_handles
+
def fault_to_http_response_code(self, fault):
if isinstance(fault, RequestTooLongError):
return HTTP_413
if isinstance(fault, ResourceNotFoundError):
return HTTP_404
+ if isinstance(fault, RequestNotAllowed):
+ return HTTP_405
if isinstance(fault, Fault) and (fault.faultcode.startswith('Client.')
or fault.faultcode == 'Client'):
return HTTP_400
View
76 src/rpclib/protocol/http.py
@@ -30,10 +30,20 @@
from urllib.parse import parse_qs
from rpclib.error import ValidationError
-from rpclib.model.complex import Array
+from rpclib.model.binary import ByteArray
from rpclib.model.fault import Fault
from rpclib.protocol import ProtocolBase
+from werkzeug.formparser import parse_form_data
+
+STREAM_READ_BLOCK_SIZE = 16384
+
+def yield_stream(istr):
+ data = istr.read(STREAM_READ_BLOCK_SIZE)
+ while len(data) > 0:
+ yield data
+ data = istr.read(STREAM_READ_BLOCK_SIZE)
+
def _get_http_headers(req_env):
retval = {}
@@ -68,11 +78,36 @@ def create_in_document(self, ctx, in_string_encoding=None):
def decompose_incoming_envelope(self, ctx):
ctx.method_request_string = '{%s}%s' % (self.app.interface.get_tns(),
ctx.in_document['PATH_INFO'].split('/')[-1])
+
logger.debug("\033[92mMethod name: %r\033[0m" % ctx.method_request_string)
ctx.in_header_doc = _get_http_headers(ctx.in_document)
ctx.in_body_doc = parse_qs(ctx.in_document['QUERY_STRING'])
+ if ctx.transport.req_env['REQUEST_METHOD'].lower() in ('post', 'put', 'patch'):
+ stream, form, files = parse_form_data(ctx.transport.req_env)
+
+ for k, v in form.lists():
+ val = ctx.in_body_doc.get(k, [])
+ val.extend(v)
+ ctx.in_body_doc[k] = val
+
+ for k, v in files.items():
+ val = ctx.in_body_doc.get(k, [])
+ val.append(yield_stream(v.stream))
+ ctx.in_body_doc[k] = val
+
+ # FIXME: some proper variable matching is needed here.
+ k2 = k + "_name"
+ val = ctx.in_body_doc.get(k2, [])
+ val.append(v.filename)
+ ctx.in_body_doc[k2] = val
+
+ k2 = k + "_type"
+ val = ctx.in_body_doc.get(k2, [])
+ val.append(v.headers.get('Content-Type','application/octet-stream'))
+ ctx.in_body_doc[k2] = val
+
logger.debug('\theader : %r' % (ctx.in_header_doc))
logger.debug('\tbody : %r' % (ctx.in_body_doc))
@@ -101,7 +136,16 @@ def dict_to_object(self, doc, inst_class):
if (self.validator is self.SOFT_VALIDATION and not
member.type.validate_string(member.type, v2)):
raise ValidationError(v2)
- native_v2 = member.type.from_string(v2)
+
+ if member.type is ByteArray or \
+ getattr(member.type, '_is_clone_of', None) is ByteArray:
+ if isinstance(v2, str) or isinstance(v2, unicode):
+ native_v2 = member.type.from_string(v2)
+ else:
+ native_v2 = v2
+ else:
+ native_v2 = member.type.from_string(v2)
+
if (self.validator is self.SOFT_VALIDATION and not
member.type.validate_native(member.type, native_v2)):
raise ValidationError(v2)
@@ -148,11 +192,6 @@ def dict_to_object(self, doc, inst_class):
logger.debug("\tset default %r(%r) = %r" %
(member.path, pkey, value))
- try:
- print inst.qo.vehicles
- except Exception,e:
- print e
-
if self.validator is self.SOFT_VALIDATION:
sti = simple_type_info.values()
sti.sort(key=lambda x: (len(x.path), x.path))
@@ -199,21 +238,10 @@ def deserialize(self, ctx, message):
self.event_manager.fire_event('before_deserialize', ctx)
- if len(ctx.in_header_doc) > 0:
- ctx.in_header = self.dict_to_object(ctx.in_header_doc,
+ ctx.in_header = self.dict_to_object(ctx.in_header_doc,
ctx.descriptor.in_header)
- else:
- ctx.in_header = [None] * len(
- ctx.descriptor.in_header.get_flat_type_info(
- ctx.descriptor.in_message))
-
- if ctx.in_body_doc is not None:
- ctx.in_object = self.dict_to_object(ctx.in_body_doc,
+ ctx.in_object = self.dict_to_object(ctx.in_body_doc,
ctx.descriptor.in_message)
- else:
- ctx.in_object = [None] * len(
- ctx.descriptor.in_message.get_flat_type_info(
- ctx.descriptor.in_message))
self.event_manager.fire_event('after_deserialize', ctx)
@@ -244,3 +272,11 @@ def serialize(self, ctx, message):
def create_out_string(self, ctx, out_string_encoding='utf8'):
ctx.out_string = ctx.out_document
+
+ def get_call_handles(self, ctx):
+ retval = super(HttpRpc, self).get_call_handles(ctx)
+
+ if len(retval) == 0:
+ pass
+
+ return retval
View
23 src/rpclib/protocol/soap/soap11.py
@@ -27,19 +27,20 @@
import cgi
import rpclib.const.xml_ns as ns
-from rpclib.const.ansi_color import LIGHT_GREEN
-from rpclib.const.ansi_color import LIGHT_RED
-from rpclib.const.ansi_color import END_COLOR
from lxml import etree
from lxml.etree import XMLSyntaxError
+from rpclib.const.http import HTTP_405
from rpclib.const.http import HTTP_500
+from rpclib.const.ansi_color import LIGHT_GREEN
+from rpclib.const.ansi_color import LIGHT_RED
+from rpclib.const.ansi_color import END_COLOR
+from rpclib.error import RequestNotAllowed
+from rpclib.model.fault import Fault
from rpclib.protocol.xml import XmlObject
from rpclib.protocol.soap.mime import collapse_swa
-from rpclib.model.fault import Fault
-
def _from_soap(in_envelope_xml, xmlids=None):
'''Parses the xml string into the header and payload.'''
@@ -145,7 +146,17 @@ def wrapped(self):
def create_in_document(self, ctx, charset=None):
if ctx.transport.type == 'wsgi':
- content_type = cgi.parse_header(ctx.transport.req_env.get("CONTENT_TYPE"))
+ # according to the soap via http standard, soap requests must only
+ # work with proper POST requests.
+ content_type = ctx.transport.req_env.get("CONTENT_TYPE")
+ http_verb = ctx.transport.req_env['REQUEST_METHOD'].upper()
+ if content_type is None or http_verb != "POST":
+ ctx.transport.resp_code = HTTP_405
+ raise RequestNotAllowed(
+ "You must issue a POST request with the Content-Type "
+ "header properly set.")
+
+ content_type = cgi.parse_header(content_type)
collapse_swa(content_type, ctx.in_string)
ctx.in_document = _parse_xml_string(ctx.in_string, charset)
View
9 src/rpclib/protocol/xml/_base.py
@@ -114,8 +114,7 @@ def set_validator(self, validator):
self.validate_document = self.__validate_lxml
self.validator = self.SCHEMA_VALIDATION
- elif validator is self.SOFT_VALIDATION or \
- validator is ProtocolBase.SOFT_VALIDATION:
+ elif validator == 'soft' or validator is self.SOFT_VALIDATION:
self.validator = self.SOFT_VALIDATION
elif validator is None:
@@ -149,8 +148,8 @@ def validate_body(self, ctx, message):
line_header = LIGHT_RED + "Response:" + END_COLOR
finally:
if self.log_messages:
- logger.debug("%s %s" % (line_header,
- etree.tostring(ctx.in_document, pretty_print=True)))
+ logger.debug("%s %s" % (line_header, ctx.method_request_string))
+ logger.debug(etree.tostring(ctx.in_document, pretty_print=True))
def create_in_document(self, ctx, charset=None):
"""Uses the iterable of string fragments in ``ctx.in_string`` to set
@@ -174,7 +173,7 @@ def create_out_string(self, ctx, charset=None):
"""Sets an iterable of string fragments to ctx.out_string"""
if charset is None:
- charset = 'utf8'
+ charset = 'UTF-8'
ctx.out_string = [etree.tostring(ctx.out_document,
xml_declaration=self.xml_declaration, encoding=charset)]
View
21 src/rpclib/server/wsgi.py
@@ -24,6 +24,8 @@
import cgi
+from threading import Lock
+
from rpclib import TransportContext
from rpclib import MethodContext
@@ -66,14 +68,19 @@ def _wsgi_input_to_iterable(http_env):
yield data
+
def reconstruct_wsgi_request(http_env):
"""Reconstruct http payload using information in the http header."""
# fyi, here's what the parse_header function returns:
# >>> import cgi; cgi.parse_header("text/xml; charset=utf-8")
# ('text/xml', {'charset': 'utf-8'})
- content_type = cgi.parse_header(http_env.get("CONTENT_TYPE"))
- charset = content_type[1].get('charset', 'utf-8')
+ content_type = http_env.get("CONTENT_TYPE")
+ if content_type is None:
+ charset = 'utf-8'
+ else:
+ content_type = cgi.parse_header(content_type)
+ charset = content_type[1].get('charset', 'utf-8')
return _wsgi_input_to_iterable(http_env), charset
@@ -166,6 +173,7 @@ def __init__(self, app):
"GET": self.handle_rpc,
"POST": self.handle_rpc,
}
+ self._mtx_build_interface_document = Lock()
def __call__(self, req_env, start_response, wsgi_url=None):
'''This method conforms to the WSGI spec for callable wsgi applications
@@ -210,8 +218,13 @@ def __handle_wsdl_request(self, req_env, start_response, url):
try:
ctx.transport.wsdl = self.app.interface.get_interface_document()
if ctx.transport.wsdl is None:
- self.app.interface.build_interface_document(url)
- ctx.transport.wsdl = self.app.interface.get_interface_document()
+ self._mtx_build_interface_document.acquire()
+
+ if ctx.transport.wsdl is None:
+ self.app.interface.build_interface_document(url)
+ ctx.transport.wsdl = self.app.interface.get_interface_document()
+
+ self._mtx_build_interface_document.release()
assert ctx.transport.wsdl != None
View
192 src/rpclib/test/interop/wsi-report-rpclib.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="wsi-test-tools/common/xsl/report.xsl" type="text/xsl" ?>
-<report name="WS-I Basic Profile Conformance Report." timestamp="2011-12-10T14:06:06.639"
+<report name="WS-I Basic Profile Conformance Report." timestamp="2012-01-16T00:24:35.343"
xmlns="http://www.ws-i.org/testing/2004/07/report/"
xmlns:wsi-report="http://www.ws-i.org/testing/2004/07/report/"
xmlns:wsi-log="http://www.ws-i.org/testing/2003/03/log/"
@@ -141,37 +141,37 @@
<assertionResult id="SSBP2403" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerInHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerOutHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}OutHeader">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerInHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerOutHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}OutHeader">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerInHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}InHeader">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerOutHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerOutHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}InHeader">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerInHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
@@ -445,535 +445,535 @@
<assertionResult id="BP2014" result="notApplicable">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_enum">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_durationResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_doubleResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}documented_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}non_nillable">
+ <entry type="message" referenceID="{rpclib.test.interop.server}python_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}huge_numberResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string">
+ <entry type="message" referenceID="{rpclib.test.interop.server}python_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}huge_number">
+ <entry type="message" referenceID="{rpclib.test.interop.server}do_something_elseResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_anyResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_data">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}test_emptyResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}test_empty">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachmentResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_dataResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}long_string">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetimeResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}multi_param">
+ <entry type="message" referenceID="{rpclib.test.interop.server}non_nillableResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_data">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}python_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}long_stringResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_referenceResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_enum">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_duration">
+ <entry type="message" referenceID="{rpclib.test.interop.server}non_nillable">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}documented_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_enumResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_doubleResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}multi_paramResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}test_emptyResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_enumResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_dataResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}documented_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}custom_messages">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_anyResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}getCustomMessagesMsgOut">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dict">
+ <entry type="message" referenceID="{rpclib.test.interop.server}huge_numberResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}multi_paramResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_stringResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachmentResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_floatResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}long_stringResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}getCustomMessagesMsgOut">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetime">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}custom_messages">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dictResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}soap_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_durationResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}documented_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}python_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}Fault">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}soap_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_reference">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dict">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}complex_returnResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_reference">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_referenceResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetime">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}do_something_elseResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}huge_number">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_stringResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}do_something_else">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_dataResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}complex_return">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}complex_return">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_booleanResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}long_string">
+ <entry type="message" referenceID="{rpclib.test.interop.server}test_empty">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}non_nillableResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_booleanResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}Fault">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double">
+ <entry type="message" referenceID="{rpclib.test.interop.server}multi_param">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}soap_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_data">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dictResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}do_something_else">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetimeResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_floatResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_dataResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_data">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}complex_returnResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}soap_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_duration">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
View
6 src/rpclib/util/wsgi_wrapper.py
@@ -30,15 +30,15 @@
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
-def run_twisted(apps, port, with_static_file_server=True):
+def run_twisted(apps, port, static_dir='.'):
"""Twisted wrapper for the rpclib.server.wsgi.Application
Takes a list of tuples containing application, url pairs, and a port to
to listen to.
"""
- static_dir = os.path.abspath(".")
- if with_static_file_server:
+ if static_dir != None:
+ static_dir = os.path.abspath(static_dir)
logging.info("registering static folder %r on /" % static_dir)
root = twisted.web.static.File(static_dir)
else:
Something went wrong with that request. Please try again.