74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
# SOAP webservices (server and client) example and basic test
|
||
|
# (using pysimplesoap contrib included in web2py)
|
||
|
# for more info see: https://code.google.com/p/pysimplesoap/wiki/Web2Py
|
||
|
|
||
|
from gluon.tools import Service
|
||
|
service = Service(globals())
|
||
|
|
||
|
# define the procedures to be exposed:
|
||
|
|
||
|
@service.soap('AddStrings', returns={'AddResult': str}, args={'a': str, 'b': str})
|
||
|
@service.soap('AddIntegers', returns={'AddResult': int}, args={'a': int, 'b': int})
|
||
|
def add(a, b):
|
||
|
"Add two values"
|
||
|
return a+b
|
||
|
|
||
|
@service.soap('SubIntegers', returns={'SubResult': int}, args={'a': int, 'b': int})
|
||
|
def sub(a, b):
|
||
|
"Substract two values"
|
||
|
return a-b
|
||
|
|
||
|
@service.soap('Division', returns={'divisionResult': float}, args={'a': float, 'b': float})
|
||
|
def division(a, b):
|
||
|
"Divide two values "
|
||
|
return a / b
|
||
|
|
||
|
@service.soap('DummyCustomElement', returns={'out0': str}, args={'in0': str}, response_element_name='customResponseTag')
|
||
|
def dummy(in0):
|
||
|
return in0
|
||
|
|
||
|
# expose the soap methods
|
||
|
|
||
|
def call():
|
||
|
return service()
|
||
|
|
||
|
# sample function to test the SOAP RPC
|
||
|
|
||
|
def test_soap_sub():
|
||
|
from gluon.contrib.pysimplesoap.client import SoapClient, SoapFault
|
||
|
# build the url to the WSDL (web service description)
|
||
|
# like "http://localhost:8000/webservices/sample/call/soap?WSDL"
|
||
|
url = URL(f="call/soap", vars={"WSDL": ""}, scheme=True)
|
||
|
# create a SOAP client
|
||
|
client = SoapClient(wsdl=url)
|
||
|
# call the SOAP remote method
|
||
|
try:
|
||
|
ret = client.SubIntegers(a=3, b=2)
|
||
|
result = ret['SubResult']
|
||
|
except SoapFault as sf:
|
||
|
result = sf
|
||
|
response.view = "soap_examples/generic.html"
|
||
|
return dict(xml_request=client.xml_request,
|
||
|
xml_response=client.xml_response,
|
||
|
result=result)
|
||
|
|
||
|
def test_custom_response_element_name():
|
||
|
from gluon.contrib.pysimplesoap.client import SoapClient, SoapFault
|
||
|
# build the url to the WSDL (web service description)
|
||
|
# like "http://localhost:8000/webservices/sample/call/soap?WSDL"
|
||
|
url = URL(f="call/soap", vars={"WSDL": ""}, scheme=True)
|
||
|
# create a SOAP client
|
||
|
client = SoapClient(wsdl=url)
|
||
|
# call the SOAP remote method
|
||
|
try:
|
||
|
ret = client.DummyCustomElement(in0="Hello World!")
|
||
|
result = ret['out0']
|
||
|
except SoapFault as sf:
|
||
|
result = sf
|
||
|
response.view = "soap_examples/generic.html"
|
||
|
return dict(xml_request=client.xml_request,
|
||
|
xml_response=client.xml_response,
|
||
|
result=result)
|