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
authorize() click to toggle source
# File lib/soap4juddi/broker.rb, line 113
def authorize
  @auth_token = @soap_connector.authorize(@base_uri)
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