|
From: <bov...@us...> - 2007-01-30 19:56:00
|
Revision: 1350
http://svn.sourceforge.net/pywebsvcs/?rev=1350&view=rev
Author: boverhof
Date: 2007-01-30 11:55:44 -0800 (Tue, 30 Jan 2007)
Log Message:
-----------
M test/wsdl2py/test_BasicComm.py
M test/wsdl2py/servers/BasicServer.py
M ZSI/generate/containers.py
[ 1596575 ] clients created with wsdl2py do not propagate errors
for one-way operations: grab response, if it's not empty it should be a soap:fault.
Modified Paths:
--------------
trunk/zsi/ZSI/generate/containers.py
trunk/zsi/test/wsdl2py/servers/BasicServer.py
trunk/zsi/test/wsdl2py/test_BasicComm.py
Modified: trunk/zsi/ZSI/generate/containers.py
===================================================================
--- trunk/zsi/ZSI/generate/containers.py 2007-01-30 19:04:28 UTC (rev 1349)
+++ trunk/zsi/ZSI/generate/containers.py 2007-01-30 19:55:44 UTC (rev 1350)
@@ -621,69 +621,74 @@
# not significant. However, a convention is to name it after the method name
# with the string "Response" appended.
#
- if self.outputName:
- response = ['%s%s' % (ID2, wsactionOut),]
- if self.isRPC() and not self.isLiteral():
- # rpc/encoded Replace wrapper name with None
- response.append(\
- '%stypecode = Struct(pname=None, ofwhat=%s.typecode.ofwhat, pyclass=%s.typecode.pyclass)' %(
- ID2, self.outputName, self.outputName)
+ if not self.outputName:
+ method.append('%s#check for soap, assume soap:fault' %(ID2,))
+ method.append('%sif self.binding.IsSOAP(): self.binding.Receive(None, **kw)' % (ID2,))
+ self.writeArray(method)
+ return
+
+ response = ['%s%s' % (ID2, wsactionOut),]
+ if self.isRPC() and not self.isLiteral():
+ # rpc/encoded Replace wrapper name with None
+ response.append(\
+ '%stypecode = Struct(pname=None, ofwhat=%s.typecode.ofwhat, pyclass=%s.typecode.pyclass)' %(
+ ID2, self.outputName, self.outputName)
+ )
+ response.append(\
+ '%sresponse = self.binding.Receive(typecode%s)' %(
+ ID2, responseArgs)
+ )
+ else:
+ response.append(\
+ '%sresponse = self.binding.Receive(%s.typecode%s)' %(
+ ID2, self.outputName, responseArgs)
+ )
+
+ # only support lit
+ if self.soap_output_headers:
+ sh = '['
+ for shb in self.soap_output_headers:
+ #shb.encodingStyle, shb.use, shb.namespace
+ shb.message
+ shb.part
+ try:
+ msg = self._wsdl.messages[shb.message]
+ part = msg.parts[shb.part]
+ if part.element is not None:
+ sh += 'GED%s,' %str(part.element)
+ else:
+ warnings.warn('skipping soap output header in Message "%s"' %str(msg))
+ except:
+ raise WSDLFormatError(
+ 'failure processing output header typecodes, ' +
+ 'could not find message "%s" or its part "%s"' %(
+ shb.message, shb.part)
)
+
+ sh += ']'
+ if len(sh) > 2:
response.append(\
- '%sresponse = self.binding.Receive(typecode%s)' %(
- ID2, responseArgs)
- )
- else:
- response.append(\
- '%sresponse = self.binding.Receive(%s.typecode%s)' %(
- ID2, self.outputName, responseArgs)
- )
+ '%sself.soapheaders = self.binding.ps.ParseHeaderElements(%s)' %(ID2, sh)
+ )
- # only support lit
- if self.soap_output_headers:
- sh = '['
- for shb in self.soap_output_headers:
- #shb.encodingStyle, shb.use, shb.namespace
- shb.message
- shb.part
- try:
- msg = self._wsdl.messages[shb.message]
- part = msg.parts[shb.part]
- if part.element is not None:
- sh += 'GED%s,' %str(part.element)
- else:
- warnings.warn('skipping soap output header in Message "%s"' %str(msg))
- except:
- raise WSDLFormatError(
- 'failure processing output header typecodes, ' +
- 'could not find message "%s" or its part "%s"' %(
- shb.message, shb.part)
- )
-
- sh += ']'
- if len(sh) > 2:
- response.append(\
- '%sself.soapheaders = self.binding.ps.ParseHeaderElements(%s)' %(ID2, sh)
- )
+ if self.outputSimpleType:
+ response.append('%sreturn %s(response)' %(ID2, self.outputName))
+ else:
+ if self.do_extended:
+ partsList = self.getOperation().getOutputMessage().parts.values()
+ subNames = GetPartsSubNames(partsList, self._wsdl)
+ args = []
+ for pa in subNames:
+ args += pa
- if self.outputSimpleType:
- response.append('%sreturn %s(response)' %(ID2, self.outputName))
- else:
- if self.do_extended:
- partsList = self.getOperation().getOutputMessage().parts.values()
- subNames = GetPartsSubNames(partsList, self._wsdl)
- args = []
- for pa in subNames:
- args += pa
+ for arg in args:
+ response.append('%s%s = response.%s' % (ID2, self.mangle(arg), self.getAttributeName(arg)) )
+ margs = ",".join(args)
+ response.append("%sreturn %s" % (ID2, margs) )
+ else:
+ response.append('%sreturn response' %ID2)
+ method += response
- for arg in args:
- response.append('%s%s = response.%s' % (ID2, self.mangle(arg), self.getAttributeName(arg)) )
- margs = ",".join(args)
- response.append("%sreturn %s" % (ID2, margs) )
- else:
- response.append('%sreturn response' %ID2)
- method += response
-
self.writeArray(method)
Modified: trunk/zsi/test/wsdl2py/servers/BasicServer.py
===================================================================
--- trunk/zsi/test/wsdl2py/servers/BasicServer.py 2007-01-30 19:04:28 UTC (rev 1349)
+++ trunk/zsi/test/wsdl2py/servers/BasicServer.py 2007-01-30 19:55:44 UTC (rev 1350)
@@ -19,9 +19,14 @@
return response
def soap_BasicOneWay(self, ps):
- return BasicServer.soap_BasicOneWay(self, ps)
+ response = BasicServer.soap_BasicOneWay(self, ps)
+ if self.request._BasicIn == 'fault':
+ # return a soap:fault
+ raise RuntimeError, 'you wanted a fault?'
+ return response
+
if __name__ == "__main__" :
port = int(sys.argv[1])
AsServer(port, (Service('test'),))
Modified: trunk/zsi/test/wsdl2py/test_BasicComm.py
===================================================================
--- trunk/zsi/test/wsdl2py/test_BasicComm.py 2007-01-30 19:04:28 UTC (rev 1349)
+++ trunk/zsi/test/wsdl2py/test_BasicComm.py 2007-01-30 19:55:44 UTC (rev 1350)
@@ -2,7 +2,7 @@
import os, sys, unittest
from ServiceTest import main, ServiceTestCase, ServiceTestSuite
-from ZSI import FaultException
+from ZSI import FaultException, Fault
from ConfigParser import ConfigParser, NoSectionError, NoOptionError
"""
Unittest
@@ -98,8 +98,26 @@
conn.close()
self.failUnless(response.status == 200, 'Wrong HTTP Result')
+ def test_dispatch_BasicOneWay(self):
+ loc = self.client_module.BasicServerLocator()
+ port = loc.getBasicServer(**self.getPortKWArgs())
+
+ msg = self.client_module.BasicOneWayRequest()
+ msg.BasicIn = 'bla bla bla'
+ rsp = port.BasicOneWay(msg)
+ self.failUnless(rsp == None, "Bad One-Way")
+ def test_dispatch_BasicOneWay_fault(self):
+ """server will send back a soap:fault
+ """
+ loc = self.client_module.BasicServerLocator()
+ port = loc.getBasicServer(**self.getPortKWArgs())
+
+ msg = self.client_module.BasicOneWayRequest()
+ msg.BasicIn = 'fault'
+ self.failUnlessRaises(FaultException, port.BasicOneWay, msg)
+
if __name__ == "__main__" :
main()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|