• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

contrib/opal/ZSI/test/wsdl2py/servers/EchoServer.py

00001 #!/usr/bin/env python
00002 ############################################################################
00003 # Joshua R. Boverhof, LBNL
00004 # See LBNLCopyright for copyright notice!
00005 ###########################################################################
00006 import sys
00007 from ZSI import ServiceContainer, Fault
00008 from ZSI.ServiceContainer import AsServer, ServiceSOAPBinding
00009 from EchoServer_server import EchoServer
00010 
00011 from ZSI.fault import Fault, ZSIFaultDetail
00012 def WSDLFaultFromException(ex, inheader, tb=None, actor=None):
00013     '''Return a Fault object created from a Python exception.
00014 
00015     <SOAP-ENV:Fault>
00016       <faultcode>SOAP-ENV:Server</faultcode>
00017       <faultstring>Processing Failure</faultstring>
00018       <detail>
00019         <ZSI:FaultDetail>
00020           <ZSI:string></ZSI:string>
00021           <ZSI:trace></ZSI:trace>
00022         </ZSI:FaultDetail>
00023       </detail>
00024     </SOAP-ENV:Fault>
00025     '''
00026     tracetext = None
00027     if tb:
00028         try:
00029             lines = '\n'.join(['%s:%d:%s' % (name, line, func)
00030                         for name, line, func, text in traceback.extract_tb(tb)])
00031         except:
00032             pass
00033         else:
00034             tracetext = lines
00035 
00036     exceptionName = ""
00037     try:
00038         exceptionName = ":".join([ex.__module__, ex.__class__.__name__])
00039     except: pass
00040 
00041     if isinstance(ex, Fault):
00042         return ex
00043 
00044     elt = ZSIFaultDetail(string=exceptionName + "\n" + str(ex), trace=tracetext)
00045     if inheader:
00046         detail, headerdetail = None, elt
00047     else:
00048         detail, headerdetail = elt, None
00049     return Fault(Fault.Server, 'Processing Failure',
00050                 actor, detail, headerdetail)
00051 
00052 ServiceContainer.FaultFromException = WSDLFaultFromException
00053 
00054 class Service(EchoServer):
00055     def soap_Echo(self, ps, **kw):
00056         request,response = EchoServer.soap_Echo(self, ps, **kw)
00057         response.EchoResult = request.EchoIn
00058         #return request,response
00059         #raise RuntimeError, 'hi'
00060         #raise Fault(911, "EMERGENCY", None, response)
00061         return request,response
00062 
00063 
00064 def twisted_main(port):
00065     from twisted.internet import reactor
00066     from twisted.application import service, internet
00067     from twisted.web.resource import Resource
00068     from twisted.web.server import Site
00069 
00070     root = Resource()
00071     root.putChild('test', Service())
00072     reactor.listenTCP(port, Site(root))
00073 
00074 def main():
00075     port = int(sys.argv[1])
00076     if issubclass(EchoServer, ServiceSOAPBinding):
00077         AsServer(port, (Service('test'),))
00078         return
00079 
00080     #from ZSI.twisted.WSresource import WSResource
00081     #if issubclass(EchoServer, WSResource):
00082     from twisted.internet import reactor
00083     reactor.callWhenRunning(twisted_main, port)
00084     reactor.run()
00085 
00086 
00087 if __name__ == "__main__" :
00088     main()

Generated on Wed Oct 20 2010 11:12:16 for APBS by  doxygen 1.7.2