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

- (Fault) initialize(code, reason, details)

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

- (Object) code (readonly)

Returns the value of attribute code



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

def code
  @code
end

- (Object) details (readonly)

Returns the value of attribute details



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

def details
  @details
end

- (Object) reason (readonly)

Returns the value of attribute reason



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

def reason
  @reason
end

Class Method Details

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



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

- (Object) to_s



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

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