Class: Savon::SOAP::XML

Inherits:
Object
  • Object
show all
Defined in:
lib/savon/soap/xml.rb

Overview

= Savon::SOAP::XML

Represents the SOAP request XML. Contains various global and per request/instance settings like the SOAP version, header, body and namespaces.

Constant Summary collapse

SchemaTypes =

XML Schema Type namespaces.

{
  "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema",
  "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config, endpoint = nil, input = nil, body = nil) ⇒ XML

Accepts an +endpoint+, an +input+ tag and a SOAP +body+.



28
29
30
31
32
33
# File 'lib/savon/soap/xml.rb', line 28

def initialize(config, endpoint = nil, input = nil, body = nil)
  self.config = config
  self.endpoint = endpoint if endpoint
  self.input = input if input
  self.body = body if body
end

Instance Attribute Details

#bodyObject

Accepts a +block+ and yields a Builder::XmlMarkup object to let you create custom body XML.



136
137
138
139
# File 'lib/savon/soap/xml.rb', line 136

def body
  @body = yield builder(nil) if block_given?
  @body
end

#configObject

Returns the value of attribute config.



35
36
37
# File 'lib/savon/soap/xml.rb', line 35

def config
  @config
end

#element_form_defaultObject

Accessor for whether all local elements should be namespaced.



118
119
120
# File 'lib/savon/soap/xml.rb', line 118

def element_form_default
  @element_form_default
end

#encodingObject

Returns the SOAP request encoding. Defaults to "UTF-8".



127
128
129
# File 'lib/savon/soap/xml.rb', line 127

def encoding
  @encoding ||= "UTF-8"
end

#endpointObject

Accessor for the SOAP +endpoint+.



41
42
43
# File 'lib/savon/soap/xml.rb', line 41

def endpoint
  @endpoint
end

#env_namespaceObject

Returns the SOAP envelope namespace. Uses the global namespace if set Defaults to :env.



66
67
68
# File 'lib/savon/soap/xml.rb', line 66

def env_namespace
  @env_namespace ||= config.env_namespace.nil? ? :env : config.env_namespace
end

#headerObject

Returns the SOAP +header+. Defaults to an empty Hash.



58
59
60
# File 'lib/savon/soap/xml.rb', line 58

def header
  @header ||= config.soap_header.nil? ? {} : config.soap_header
end

#inputObject

Accessor for the SOAP +input+ tag.



38
39
40
# File 'lib/savon/soap/xml.rb', line 38

def input
  @input
end

#namespaceObject

Accessor for the default namespace URI.



121
122
123
# File 'lib/savon/soap/xml.rb', line 121

def namespace
  @namespace
end

#namespace_identifierObject

Returns the default namespace identifier.



113
114
115
# File 'lib/savon/soap/xml.rb', line 113

def namespace_identifier
  @namespace_identifier ||= :wsdl
end

#namespacesObject

Returns the +namespaces+. Defaults to a Hash containing the SOAP envelope namespace.



74
75
76
77
78
79
80
# File 'lib/savon/soap/xml.rb', line 74

def namespaces
  @namespaces ||= begin
    key = ["xmlns"]
    key << env_namespace if env_namespace && env_namespace != ""
    { key.join(":") => SOAP::Namespace[version] }
  end
end

#wsseObject

Accessor for the Savon::WSSE object.



124
125
126
# File 'lib/savon/soap/xml.rb', line 124

def wsse
  @wsse
end

#xml(directive_tag = :xml, attrs = {}) ⇒ Object

Accepts a +block+ and yields a Builder::XmlMarkup object to let you create a completely custom XML.



147
148
149
# File 'lib/savon/soap/xml.rb', line 147

def xml(directive_tag = :xml, attrs = {})
  @xml = yield builder(directive_tag, attrs) if block_given?
end

Instance Method Details

#namespace_by_uri(uri) ⇒ Object



82
83
84
85
86
87
# File 'lib/savon/soap/xml.rb', line 82

def namespace_by_uri(uri)
  namespaces.each do |candidate_identifier, candidate_uri|
    return candidate_identifier.gsub(/^xmlns:/, '') if candidate_uri == uri
  end
  nil
end

#to_xmlObject

Returns the XML for a SOAP request.



155
156
157
158
159
160
161
162
163
164
165
# File 'lib/savon/soap/xml.rb', line 155

def to_xml
  @xml ||= tag(builder, :Envelope, complete_namespaces) do |xml|
    tag(xml, :Header) { xml << header_for_xml } unless header_for_xml.empty?

    if input.nil?
      tag(xml, :Body)
    else
      tag(xml, :Body) { xml.tag!(*add_namespace_to_input) { xml << body_to_xml } }
    end
  end
end

#typesObject



105
106
107
# File 'lib/savon/soap/xml.rb', line 105

def types
  @types ||= {}
end

#use_namespace(path, uri) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/savon/soap/xml.rb', line 93

def use_namespace(path, uri)
  @internal_namespace_count ||= 0

  unless identifier = namespace_by_uri(uri)
    identifier = "ins#{@internal_namespace_count}"
    namespaces["xmlns:#{identifier}"] = uri
    @internal_namespace_count += 1
  end

  used_namespaces[path] = identifier
end

#used_namespacesObject



89
90
91
# File 'lib/savon/soap/xml.rb', line 89

def used_namespaces
  @used_namespaces ||= {}
end

#versionObject

Returns the SOAP +version+. Defaults to Savon.config.soap_version.



50
51
52
# File 'lib/savon/soap/xml.rb', line 50

def version
  @version ||= config.soap_version
end

#version=(version) ⇒ Object

Sets the SOAP +version+.

Raises:

  • (ArgumentError)


44
45
46
47
# File 'lib/savon/soap/xml.rb', line 44

def version=(version)
  raise ArgumentError, "Invalid SOAP version: #{version}" unless SOAP::Versions.include? version
  @version = version
end