class Soap4juddi::Broker
Attributes
base_uri[RW]
soap_connector[R]
soap_xml[R]
urns[R]
Public Class Methods
new(urns)
click to toggle source
# File lib/soap4juddi/broker.rb, line 11 def initialize(urns) @urns = urns @soap_connector = Soap4juddi::Connector.new @soap_xml = Soap4juddi::XML.new end
Public Instance Methods
authenticate(auth_user, auth_password)
click to toggle source
# File lib/soap4juddi/broker.rb, line 109 def authenticate(auth_user, auth_password) @soap_connector.authenticate(auth_user, auth_password) end
delete_binding(binding)
click to toggle source
# File lib/soap4juddi/broker.rb, line 77 def delete_binding(binding) xml = @soap_xml.element_with_value('bindingKey', binding) @soap_connector.request_soap(@base_uri, 'publishv2', 'delete_binding', add_auth_body(xml)) do |res| { 'errno' => extract_errno(res.body) } end end
delete_business(key)
click to toggle source
# File lib/soap4juddi/broker.rb, line 50 def delete_business(key) xml = @soap_xml.element_with_value('businessKey', key) @soap_connector.request_soap(@base_uri, 'publishv2', 'delete_business', add_auth_body(xml)) do |res| { 'errno' => extract_errno(res.body) } end end
delete_service_element(name, urn)
click to toggle source
# File lib/soap4juddi/broker.rb, line 102 def delete_service_element(name, urn) service_key = @soap_xml.element_with_value('serviceKey', "#{urn}#{name}") @soap_connector.request_soap(@base_uri, 'publishv2', 'delete_service', add_auth_body(service_key)) do |res| { 'errno' => extract_errno(res.body) } end end
find_business(pattern)
click to toggle source
# File lib/soap4juddi/broker.rb, line 42 def find_business(pattern) qualifiers = @soap_xml.element_with_value('findQualifiers', @soap_xml.element_with_value('findQualifier', 'approximateMatch')) xml = @soap_xml.element_with_value('name', pattern) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'find_business', "#{qualifiers} #{xml}") do |res| extract_business_entries(res.body) end end
find_element_bindings(name, urn)
click to toggle source
# File lib/soap4juddi/broker.rb, line 71 def find_element_bindings(name, urn) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'get_serviceDetail', @soap_xml.element_with_value('serviceKey', "#{urn}#{name}")) do |res| extract_bindings(res.body) end end
find_service_components(pattern)
click to toggle source
# File lib/soap4juddi/broker.rb, line 67 def find_service_components(pattern) find_services(pattern, 'service-components') end
find_services(pattern, type = 'services')
click to toggle source
# File lib/soap4juddi/broker.rb, line 57 def find_services(pattern, type = 'services') qualifier1 = @soap_xml.element_with_value('findQualifier', 'approximateMatch') qualifier2 = @soap_xml.element_with_value('findQualifier', 'orAllKeys') qualifiers = @soap_xml.element_with_value('findQualifiers', "#{qualifier1}#{qualifier2}") xml = @soap_xml.element_with_value('name', pattern) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'find_service', "#{qualifiers} #{xml}") do |res| extract_service_entries_elements(res.body, @urns[type]) end end
get_business(key)
click to toggle source
# File lib/soap4juddi/broker.rb, line 36 def get_business(key) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'get_businessDetail', @soap_xml.element_with_value('businessKey', key)) do |res| extract_business(res.body) end end
get_service_element(name, urn)
click to toggle source
# File lib/soap4juddi/broker.rb, line 84 def get_service_element(name, urn) key = name.include?(urn) ? name : "#{urn}#{name}" xml = @soap_xml.element_with_value('serviceKey', key) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'get_serviceDetail', "#{xml}") do |res| { 'name' => extract_name(res.body), 'key' => key, 'description' => extract_descriptions(res.body), 'definition' => extract_service_definition(res.body) } end end
save_business(key, name, descriptions, contacts)
click to toggle source
# File lib/soap4juddi/broker.rb, line 25 def save_business(key, name, descriptions, contacts) validate_elements(contacts, 'contacts') validate_elements(descriptions, 'descriptions') body = build_business_entity(key, name, descriptions, contacts) @soap_connector.request_soap(@base_uri, 'publishv2', 'save_business', add_auth_body(body)) do | res| extract_business(res.body) end end
save_element_bindings(service, bindings, urn, description)
click to toggle source
# File lib/soap4juddi/broker.rb, line 17 def save_element_bindings(service, bindings, urn, description) validate_elements(bindings, 'bindings') body = add_bindings("", service, bindings, urn, description) @soap_connector.request_soap(@base_uri, 'publishv2', 'save_binding', add_auth_body(body)) do | res| res.body end end
save_service_element(name, description, definition, urn, business_key)
click to toggle source
# File lib/soap4juddi/broker.rb, line 95 def save_service_element(name, description, definition, urn, business_key) bindings = find_element_bindings_access_points(name, urn)['data']['result'] result = save_service_element_with_side_effect_which_clears_bindings(name, description, definition, urn, business_key) save_element_bindings(name, bindings, urn, '') result end
Private Instance Methods
add_auth_body(body)
click to toggle source
# File lib/soap4juddi/broker.rb, line 140 def add_auth_body(body) body = auth_body + body end
add_binding(body, service, binding, urn, description)
click to toggle source
# File lib/soap4juddi/broker.rb, line 233 def add_binding(body, service, binding, urn, description) access_point = @soap_xml.element_with_value('accessPoint', binding, {'URLType' => extract_binding_url_type(binding)}) description_data = @soap_xml.element_with_value('description', description) model_instance_details = @soap_xml.element_with_value('tModelInstanceDetails', '') bindingTemplate = @soap_xml.element_with_value( "bindingTemplate", "#{description_data}#{access_point}#{model_instance_details}", {'bindingKey' => '', 'serviceKey' => "#{urn}#{service}"}) body + bindingTemplate end
add_bindings(body, service, bindings, urn, description)
click to toggle source
# File lib/soap4juddi/broker.rb, line 199 def add_bindings(body, service, bindings, urn, description) if (bindings) and (not bindings.empty?) bindings.each do |binding| body = add_binding(body, service, binding, urn, description) end end body end
add_contacts(body, contacts)
click to toggle source
# File lib/soap4juddi/broker.rb, line 208 def add_contacts(body, contacts) if (contacts) and (not contacts.empty?) # byebug contacts_xml = add_contacts_to_xml("", contacts) xml = @soap_xml.element_with_value("contacts", contacts_xml) body = "#{body}#{xml}" if xml and not (xml == "") end body end
add_contacts_to_xml(contacts_xml, contacts)
click to toggle source
# File lib/soap4juddi/broker.rb, line 218 def add_contacts_to_xml(contacts_xml, contacts) contacts.each do |contact| contact_details = "<contact useType='(Job Title, Role)'> <description>#{contact['description']}</description> <personName>#{contact['name']}</personName> <phone useType='(Extension, Domestic, International, DSN)'>#{contact['phone']}</phone> <email useType='Email'>#{contact['email']}</email> </contact>" contacts_xml = contacts_xml + contact_details end contacts_xml end
add_definition(body, definition)
click to toggle source
# File lib/soap4juddi/broker.rb, line 176 def add_definition(body, definition) if definition and not (definition.strip == "") keyedReference = @soap_xml.element_with_value('keyedReference', '', {'tModelKey' => 'uddi:uddi.org:wadl:types', 'keyName' => 'service-definition', 'keyValue' => definition}) return body + @soap_xml.element_with_value('categoryBag', keyedReference) end body end
add_description(body, desc)
click to toggle source
# File lib/soap4juddi/broker.rb, line 193 def add_description(body, desc) xml = @soap_xml.element_with_value('description', desc, {'xml:lang' => 'en'}) body = "#{body}#{xml}" if desc and not (desc == "") body end
add_descriptions(body, descriptions)
click to toggle source
# File lib/soap4juddi/broker.rb, line 184 def add_descriptions(body, descriptions) if (descriptions) and (not descriptions.empty?) descriptions.each do |desc| body = add_description(body, desc) end end body end
auth_body()
click to toggle source
# File lib/soap4juddi/broker.rb, line 263 def auth_body @soap_xml.element_with_key_value("authInfo", "authtoken", @auth_token) end
build_business_entity(key, name, descriptions, contacts)
click to toggle source
# File lib/soap4juddi/broker.rb, line 226 def build_business_entity(key, name, descriptions, contacts) body = @soap_xml.element_with_value("name", name) body = add_descriptions(body, descriptions) body = add_contacts(body, contacts) @soap_xml.element_with_value('businessEntity', body, {'businessKey' => key}) end
build_service_xml(name, description, definition, urn, business_key)
click to toggle source
# File lib/soap4juddi/broker.rb, line 133 def build_service_xml(name, description, definition, urn, business_key) service_details = @soap_xml.element_with_value('name', name) service_details = add_descriptions(service_details, description) service_details = add_definition(service_details, definition) @soap_xml.element_with_value('businessService', service_details, {'businessKey' => business_key, 'serviceKey' => "#{urn}#{name}"}) end
extract_access_point(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 327 def extract_access_point(soap) soap[/^.*>(.*?)<\/ns2:accessPoint>/, 1] end
extract_binding_url_type(binding)
click to toggle source
# File lib/soap4juddi/broker.rb, line 380 def extract_binding_url_type(binding) url_type = nil url_type = 'https' if binding.include?('https') url_type = 'http' if (not binding.include?('https') and binding.include?('http')) url_type ||= 'unknown' url_type end
extract_bindings(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 277 def extract_bindings(soap) entries = {} entry = soap[/<ns2:bindingTemplates>(.*?)<\/ns2:bindingTemplates>/, 1] while entry do binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] break if binding.nil? or ((binding.is_a? String) and (binding.strip == "")) id = @soap_xml.extract_value(binding, 'bindingKey') entries[id] = {'access_point' => extract_access_point(binding), 'description' => extract_description(binding)} entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = "" entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "") entry = nil if entry.strip == "" end { 'bindings' => entries } end
extract_bindings_access_points(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 312 def extract_bindings_access_points(soap) entries = [] entry = soap[/<ns2:bindingTemplates>(.*?)<\/ns2:bindingTemplates>/, 1] while entry do binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] break if binding.nil? or ((binding.is_a? String) and (binding.strip == "")) id = @soap_xml.extract_value(binding, 'bindingKey') entries << extract_access_point(binding) entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = "" entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "") entry = nil if entry.strip == "" end entries end
extract_business(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 249 def extract_business(soap) entries = {} index = @soap_xml.extract_value(soap, 'businessKey').gsub(@urns['domains'], "").gsub(@urns['teams'], "") name = extract_name(soap) contacts = extract_contacts(soap) descriptions = extract_descriptions(soap) entries[index] = { 'name' => name, 'description' => descriptions, 'contacts' => contacts } entries end
extract_business_entries(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 159 def extract_business_entries(soap) entries = {} entry = soap[/<ns2:businessList (.*?)<\/ns2:businessList>/, 1] while entry do business = entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1] break if business.nil? or ((business.is_a? String) and (business.strip == "")) business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1] = "" if business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1] id = @soap_xml.extract_value(entry, 'businessKey') key = id.gsub(@urns['domains'], "").gsub(@urns['teams'], "") entries[key] = { 'id' => id, 'name' => extract_name(business) } entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1] = "" entry.gsub!("<ns2:businessInfo </ns2:businessInfo>", "") entry = nil if entry.strip == "" end { 'businesses' => entries } end
extract_contacts(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 292 def extract_contacts(soap) entries = [] entry = soap[/<ns2:contacts>(.*?)<\/ns2:contacts>/, 1] while entry do # byebug entry.gsub!('useType="(Extension, Domestic, International, DSN)"', "") if entry entry.gsub!('useType="Email"', "") if entry entry.gsub!("useType='(Extension, Domestic, International, DSN)'", "") if entry entry.gsub!("useType='Email'", "") if entry contact = entry[/<ns2:contact (.*?)<\/ns2:contact>/, 1] break if contact.nil? or ((contact.is_a? String) and (contact.strip == "")) # byebug entries << { 'name' => extract_person_name(contact), 'description' => extract_description(contact), 'phone' => extract_phone(contact), 'email' => extract_email(contact)} entry[/<ns2:contact (.*?)<\/ns2:contact>/, 1] = "" entry.gsub!("<ns2:contact </ns2:contact>", "") entry = nil if entry.strip == "" end entries end
extract_description(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 338 def extract_description(soap) description = soap[/<ns2:description xml:lang="en">(.*?)<\/ns2:description>/, 1] description ||= soap[/<ns2:description xml:lang='en'>(.*?)<\/ns2:description>/, 1] description ||= soap[/<ns2:description>(.*?)<\/ns2:description>/, 1] description end
extract_descriptions(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 366 def extract_descriptions(soap) descriptions = [] description = soap[/<ns2:description xml:lang="en">(.*?)<\/ns2:description>/, 1] description ||= soap[/<ns2:description xml:lang='en'>(.*?)<\/ns2:description>/, 1] while description do descriptions << description soap.gsub!("<ns2:description xml:lang=\"en\">#{description}<\/ns2:description>", "") soap.gsub!("<ns2:description xml:lang='en'>#{description}<\/ns2:description>", "") description = soap[/<ns2:description xml:lang="en">(.*?)<\/ns2:description>/, 1] description ||= soap[/<ns2:description xml:lang='en'>(.*?)<\/ns2:description>/, 1] end descriptions end
extract_email(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 345 def extract_email(soap) email = soap[/<ns2:email xml:lang="en">(.*?)<\/ns2:email>/, 1] email ||= soap[/<ns2:email xml:lang='en'>(.*?)<\/ns2:email>/, 1] email ||= soap[/<ns2:email >(.*?)<\/ns2:email>/, 1] email end
extract_errno(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 259 def extract_errno(soap) soap[/<ns2:result errno="(.*?)"\/>/, 1] end
extract_name(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 331 def extract_name(soap) name = soap[/<ns2:name xml:lang="en">(.*?)<\/ns2:name>/, 1] name ||= soap[/<ns2:name xml:lang='en'>(.*?)<\/ns2:name>/, 1] name ||= soap[/<ns2:name>(.*?)<\/ns2:name>/, 1] name end
extract_person_name(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 352 def extract_person_name(soap) person_name = soap[/<ns2:personName xml:lang="en">(.*?)<\/ns2:personName>/, 1] person_name ||= soap[/<ns2:personName xml:lang='en'>(.*?)<\/ns2:personName>/, 1] person_name ||= soap[/<ns2:personName>(.*?)<\/ns2:personName>/, 1] person_name end
extract_phone(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 359 def extract_phone(soap) phone = soap[/<ns2:phone xml:lang="en">(.*?)<\/ns2:phone>/, 1] phone ||= soap[/<ns2:phone xml:lang='en'>(.*?)<\/ns2:phone>/, 1] phone ||= soap[/<ns2:phone >(.*?)<\/ns2:phone>/, 1] phone end
extract_service(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 119 def extract_service(soap) entries = {} entries[@soap_xml.extract_value(soap, 'serviceKey')] = extract_name(soap) entries end
extract_service_definition(soap)
click to toggle source
# File lib/soap4juddi/broker.rb, line 273 def extract_service_definition(soap) soap[/<ns2:keyedReference tModelKey="uddi:uddi.org:wadl:types" keyName="service-definition" keyValue="(.*?)"\/>/, 1] end
extract_service_entries_elements(soap, urn)
click to toggle source
# File lib/soap4juddi/broker.rb, line 144 def extract_service_entries_elements(soap, urn) entries = {} entry = soap[/<ns2:serviceInfos>(.*?)<\/ns2:serviceInfos>/, 1] while entry do service = entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1] break if service.nil? or ((service.is_a? String) and (service.strip == "")) id = @soap_xml.extract_value(service, 'serviceKey') entries[id.gsub(urn, "")] = { 'id' => id, 'name' => extract_name(service) } if id.include?(urn) entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1] = "" entry.gsub!("<ns2:serviceInfo </ns2:serviceInfo>", "") entry = nil if entry.strip == "" end { 'services' => entries } end
find_element_bindings_access_points(name, urn)
click to toggle source
# File lib/soap4juddi/broker.rb, line 267 def find_element_bindings_access_points(name, urn) @soap_connector.request_soap(@base_uri, 'inquiryv2', 'get_serviceDetail', @soap_xml.element_with_value('serviceKey', "#{urn}#{name}")) do |res| extract_bindings_access_points(res.body) end end
save_service_element_with_side_effect_which_clears_bindings(name, description, definition, urn, business_key)
click to toggle source
# File lib/soap4juddi/broker.rb, line 125 def save_service_element_with_side_effect_which_clears_bindings(name, description, definition, urn, business_key) xml = build_service_xml(name, description, definition, urn, business_key) result = @soap_connector.request_soap(@base_uri, 'publishv2', 'save_service', add_auth_body(xml)) do | res| extract_service(res.body) end result end
validate_elements(elements, label)
click to toggle source
# File lib/soap4juddi/broker.rb, line 244 def validate_elements(elements, label) raise Soap4juddi::InvalidElementError.new("invalid #{label}") if (elements) and (not elements.is_a?(Array)) true end