Exception: Handsoap::Fault

Inherits:
StandardError
  • Object
show all
Defined in:
lib/handsoap/service.rb

Overview

Wraps SOAP errors in a standard class.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(code, reason, details) ⇒ Fault

Returns a new instance of Fault



72
73
74
75
76
# File 'lib/handsoap/service.rb', line 72

def initialize(code, reason, details)
  @code = code
  @reason = reason
  @details = details
end

Instance Attribute Details

#codeObject (readonly)

Returns the value of attribute code



70
71
72
# File 'lib/handsoap/service.rb', line 70

def code
  @code
end

#detailsObject (readonly)

Returns the value of attribute details



70
71
72
# File 'lib/handsoap/service.rb', line 70

def details
  @details
end

#reasonObject (readonly)

Returns the value of attribute reason



70
71
72
# File 'lib/handsoap/service.rb', line 70

def reason
  @reason
end

Class Method Details

.from_xml(node, options = { :namespace => nil }) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/handsoap/service.rb', line 82

def self.from_xml(node, options = { :namespace => nil })
  if not options[:namespace]
    raise "Missing option :namespace"
  end

  ns = { 'env' => options[:namespace] }

  # tries to find SOAP1.2 fault code
  fault_code = node.xpath("./env:Code/env:Value", ns).to_s

  # if no SOAP1.2 fault code was found, try the SOAP1.1 way
  unless fault_code
    fault_code = node.xpath('./faultcode', ns).to_s

    # if fault_code is blank, add the namespace and try again
    unless fault_code
      fault_code = node.xpath("//env:faultcode", ns).to_s
    end
  end

  # tries to find SOAP1.2 reason
  reason = node.xpath("./env:Reason/env:Text[1]", ns).to_s

  # if no SOAP1.2 faultstring was found, try the SOAP1.1 way
  unless reason
    reason = node.xpath('./faultstring', ns).to_s

    # if reason is blank, add the namespace and try again
    unless reason
      reason = node.xpath("//env:faultstring", ns).to_s
    end
  end

  details = node.xpath('./detail/*', ns)
  self.new(fault_code, reason, details)
end

Instance Method Details

#to_sObject



78
79
80
# File 'lib/handsoap/service.rb', line 78

def to_s
  "Handsoap::Fault { :code => '#{@code}', :reason => '#{@reason}' }"
end