Class: SOAP::SOAPBody

Inherits:
SOAPStruct show all
Includes:
SOAPEnvelopeElement
Defined in:
lib/soap/rpc/element.rb,
lib/soap/element.rb

Overview

Add method definitions for RPC to common definition in element.rb

Constant Summary

Constants included from SOAP

AttrActor, AttrActorName, AttrArrayType, AttrArrayTypeName, AttrEncodingStyle, AttrEncodingStyleName, AttrHref, AttrHrefName, AttrId, AttrIdName, AttrMustUnderstand, AttrMustUnderstandName, AttrOffset, AttrOffsetName, AttrPosition, AttrPositionName, AttrRoot, AttrRootName, Base64Literal, EleBody, EleBodyName, EleEnvelope, EleEnvelopeName, EleFault, EleFaultActor, EleFaultActorName, EleFaultCode, EleFaultCodeName, EleFaultDetail, EleFaultDetailName, EleFaultName, EleFaultString, EleFaultStringName, EleHeader, EleHeaderName, EncodingNamespace, EnvelopeNamespace, LiteralNamespace, MediaType, NextActor, PropertyName, SOAPNamespaceTag, SOAPProxy, TypeMap, ValueArray, ValueArrayName, Version, XSDNamespaceTag, XSINamespaceTag

Instance Attribute Summary collapse

Attributes included from SOAPCompoundtype

#qualified

Attributes included from SOAPType

#definedtype, #elename, #encodingstyle, #extraattr, #force_typed, #id, #parent, #position, #precedents, #root

Attributes inherited from XSD::NSDBase

#type

Instance Method Summary collapse

Methods inherited from SOAPStruct

#[], #[]=, #add, decode, #each, #have_member, #key?, #members, #replace, #to_obj, #to_s

Methods included from SOAPType

#inspect, #rootnode

Methods inherited from XSD::NSDBase

inherited, #init, types

Constructor Details

#initialize(data = nil, is_fault = false) ⇒ SOAPBody

Returns a new instance of SOAPBody.


100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/soap/element.rb', line 100

def initialize(data = nil, is_fault = false)
  super(nil)
  @elename = EleBodyName
  @encodingstyle = nil
  if data
    if data.respond_to?(:to_xmlpart)
      data = SOAP::SOAPRawData.new(data)
    elsif defined?(::REXML) && defined?(::REXML::Element) && data.is_a?(::REXML::Element)
      data = SOAP::SOAPRawData.new(SOAP::SOAPREXMLElementWrap.new(data))
    end
    if data.respond_to?(:elename)
      add(data.elename.name, data)
    else
      data.to_a.each do |datum|
        add(datum.elename.name, datum)
      end
    end
  end
  @is_fault = is_fault
end

Instance Attribute Details

#is_faultObject (readonly)

Returns the value of attribute is_fault


98
99
100
# File 'lib/soap/element.rb', line 98

def is_fault
  @is_fault
end

Instance Method Details

#encode(generator, ns, attrs = {}) ⇒ Object


121
122
123
124
125
126
127
128
# File 'lib/soap/element.rb', line 121

def encode(generator, ns, attrs = {})
  name = ns.name(@elename)
  generator.encode_tag(name, attrs)
  @data.each do |data|
    yield(data)
  end
  generator.encode_tag_end(name, @data.size > 0)
end

#faultObject


51
52
53
54
55
56
57
# File 'lib/soap/rpc/element.rb', line 51

def fault
  if @is_fault
    self['fault']
  else
    nil
  end
end

#fault=(fault) ⇒ Object


59
60
61
62
# File 'lib/soap/rpc/element.rb', line 59

def fault=(fault)
  @is_fault = true
  add('fault', fault)
end

#outparamsObject


40
41
42
43
44
45
46
47
48
49
# File 'lib/soap/rpc/element.rb', line 40

def outparams
  root = root_node
  if !@is_fault and !root.nil? and !root.is_a?(SOAPBasetype)
    op = root[1..-1]
    op = nil if op && op.empty?
    op
  else
    nil
  end
end

#requestObject


20
21
22
# File 'lib/soap/rpc/element.rb', line 20

def request
  root_node
end

#responseObject


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/soap/rpc/element.rb', line 24

def response
  root = root_node
  if !@is_fault
    if root.nil?
      nil
    elsif root.is_a?(SOAPBasetype)
      root
    else
      # Initial element is [retval].
      root[0]
    end
  else
    root
  end
end

#root_nodeObject


130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/soap/element.rb', line 130

def root_node
  @data.each do |node|
    if node.root == 1
	return node
    end
  end
  # No specified root...
  @data.each do |node|
    if node.root != 0
	return node
    end
  end
  raise Parser::FormatDecodeError.new('no root element')
end