Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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 from
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.