| Class | OpenWFE::SoapParticipant |
| In: |
lib/openwfe/participants/soapparticipants.rb
|
| Parent: | Object |
Wrapping a simple web service call within an OpenWFEru participant.
quote_service = OpenWFE::SoapParticipant.new(
"http://services.xmethods.net/soap", # service URI
"urn:xmethods-delayed-quotes", # namespace
"getQuote", # operation name
[ "symbol" ]) # param arrays (workitem fields)
engine.register_participant("quote_service", quote_service)
By default, call params for the SOAP operations are determined by iterating the parameters and fetching the values under the corresponding workitem fields. This behaviour can be changed by overriding the prepare_call_params() method.
On the return side, you can override the method handle_call_result for better mappings between web service calls and the workitems.
# File lib/openwfe/participants/soapparticipants.rb, line 70
70: def initialize \
71: (endpoint_url, namespace, method_name, params, param_prefix="")
72:
73: super()
74:
75: @driver = SOAP::RPC::Driver.new(endpoint_url, namespace)
76:
77: @method_name = method_name
78: @params = params
79: @param_prefix = param_prefix
80:
81: @driver.add_method(method_name, *params)
82: end
The method called by the engine when the flow reaches an instance of this Participant class.
# File lib/openwfe/participants/soapparticipants.rb, line 88
88: def consume (workitem)
89:
90: call_params = prepare_call_params(workitem)
91:
92: call_result = @driver.send(@method_name, *call_params)
93:
94: handle_call_result(call_result, workitem)
95:
96: reply_to_engine(workitem)
97: end
This implementation simply stuffs the result into the workitem as an attribute named "result".
Feel free to override this method.
# File lib/openwfe/participants/soapparticipants.rb, line 118
118: def handle_call_result (result, workitem)
119:
120: workitem.attributes["__result__"] = result
121: end
The base implementation : assumes that for each webservice operation param there is a workitem field with the same name.
Feel free to override this method.
# File lib/openwfe/participants/soapparticipants.rb, line 105
105: def prepare_call_params (workitem)
106:
107: @params.collect do |param|
108: get_param workitem, param
109: end
110: end