To use this operator, you will need to install the de.uniol.inf.is.odysseus.wsenrich.feature.feature.group (found in the incubation update site, https://odysseus.informatik.uni-oldenburg.de/updatesite/odysseus_all_new/incubation/origin/master/latest/)
This operator can be used to access an external web service and enrich incomming elements with the results from the web service. Different processing modes are available, data can be cached.
Caching parameter:
Beta-Options (use with care, may not work in any cases!):
#PARSER PQL #QUERY input = ACCESS({ source=’Source’, wrapper=’GenericPull’, transport=’File’, protocol=’CSV’, datahandler=’Tuple’, options=[ [’filename’, ’C:\Users\Daniel\Desktop\Test\Testdaten\cityInf.csv’], [’delay’, ’1’] ], schema=[[’id’, ’Integer’],[’data’, ’String’]] } ) s01 = WSENRICH({ servicemethod=’REST’, method=’GET’, url=’http://api.geonames.org/countryInfo?lang=it&’, urlsuffix=’&username=demo&style=full’, arguments=[[’country’, ’data’]], datafields=[ [’//countryCode’, ’String’], [’//countryName’, ’String’], [’//isoNumeric’, ’Integer’] ], parsingMethod=’XPATH’, outerJoin=’false’, caching=’true’, cacheSize=100, expirationTime=300000, removalStrategy=’FIFO’ }, input ) |
A simple example for an xml-rpc based communication:
Server is from here:
https://docs.python.org/3/library/xmlrpc.server.html
from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.server import SimpleXMLRPCRequestHandler # Restrict to a particular path. class RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/RPC2',) # Create server with SimpleXMLRPCServer(('localhost', 8000), requestHandler=RequestHandler) as server: server.register_introspection_functions() # Register pow() function; this will use the value of # pow.__name__ as the name, which is just 'pow'. server.register_function(pow) # Register a function under a different name def adder_function(x, y): return x + y server.register_function(adder_function, 'add') # Register an instance; all the methods of the instance are # published as XML-RPC methods (in this case, just 'mul'). class MyFuncs: def mul(self, x, y): return x * y server.register_instance(MyFuncs()) # Run the server's main loop server.serve_forever() |
For this, the following (rather silly) odysseus query can be used.
#PARSER PQL #RUNQUERY timer = TIMER({ period = 1000, source = 'timer' } ) mapped = MAP({ expressions = [ ['1','a'], ['1','b'] ], keepinput = true }, timer ) enriched = WSENRICH({ url = 'http://localhost:8000/RPC2', servicemethod = 'XML-RPC', datafields = [['result', 'Integer']], arguments = [['a','a'],['b','b']], operation = 'add' }, mapped ) |
and creates the following output
As you can see. The attribute time is not used for processing, but is still part of the ouput.