Class | SOAP::EncodingStyle::LiteralHandler
In: | soap/encodingstyle/literalHandler.rb
Parent: | Handler

### Methods

decode_attrs decode_epilogue decode_parent decode_prologue decode_tag decode_tag_end decode_text encode_data encode_data_end new

### Classes and Modules

Class SOAP::EncodingStyle::LiteralHandler::SOAPTemporalObject
Class SOAP::EncodingStyle::LiteralHandler::SOAPUnknown

### Constants

Namespace | = | SOAP::LiteralNamespace

### Public Class methods

new(charset = nil)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 20
      def initialize(charset = nil)
        super(charset)
        @textbuf = ''
      end

### Public Instance methods

decode_attrs(ns, attrs)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 165
      def decode_attrs(ns, attrs)
        extraattr = {}
        attrs.each do |key, value|
          qname = ns.parse_local(key)
          extraattr[qname] = value
        end
        extraattr
      end

decode_epilogue()

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 177
      def decode_epilogue
      end

decode_parent(parent, node)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 180
      def decode_parent(parent, node)
        return unless parent.node
        case parent.node
        when SOAPUnknown
          newparent = parent.node.as_element
          node.parent = newparent
          parent.replace_node(newparent)
          decode_parent(parent, node)
        when SOAPElement
          parent.node.add(node)
          node.parent = parent.node
        when SOAPStruct
          parent.node.add(node.elename.name, node)
          node.parent = parent.node
        when SOAPArray
          if node.position
            parent.node[*(decode_arypos(node.position))] = node
            parent.node.sparse = true
          else
            parent.node.add(node)
          end
          node.parent = parent.node
        else
          raise EncodingStyleError.new("illegal parent: #{parent.node}")
        end
      end

decode_prologue()

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 174
      def decode_prologue
      end

decode_tag(ns, elename, attrs, parent)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 137
      def decode_tag(ns, elename, attrs, parent)
        @textbuf = ''
        o = SOAPUnknown.new(self, elename, decode_attrs(ns, attrs))
        o.parent = parent
        o
      end

decode_tag_end(ns, node)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 144
      def decode_tag_end(ns, node)
        o = node.node
        if o.is_a?(SOAPUnknown)
          newnode = if /\A\s*\z/ =~ @textbuf
              o.as_element
            else
              o.as_string
            end
          node.replace_node(newnode)
          o = node.node
        end

        decode_textbuf(o)
        @textbuf = ''
      end

decode_text(ns, text)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 160
      def decode_text(ns, text)
        # @textbuf is set at decode_tag_end.
        @textbuf << text
      end

encode_data(generator, ns, data, parent)

encode interface.

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 29
      def encode_data(generator, ns, data, parent)
        attrs = {}
        name = generator.encode_name(ns, data, attrs)
        data.extraattr.each do |k, v|
          # ToDo: check generator.attributeformdefault here
          if k.is_a?(XSD::QName)
            if k.namespace
              SOAPGenerator.assign_ns(attrs, ns, k.namespace)
              k = ns.name(k)
            else
              k = k.name
            end
          end
          attrs[k] = v
        end
        case data
        when SOAPRawString
          generator.encode_tag(name, attrs)
          generator.encode_rawstring(data.to_s)
        when XSD::XSDString
          generator.encode_tag(name, attrs)
          str = data.to_s
          str = XSD::Charset.encoding_to_xml(str, @charset) if @charset
          generator.encode_string(str)
        when XSD::XSDAnySimpleType
          generator.encode_tag(name, attrs)
          generator.encode_string(data.to_s)
        when SOAPStruct
          generator.encode_tag(name, attrs)
          data.each do |key, value|
            generator.encode_child(ns, value, data)
          end
        when SOAPArray
          generator.encode_tag(name, attrs)
          data.traverse do |child, *rank|
            data.position = nil
            generator.encode_child(ns, child, data)
          end
        when SOAPElement
          # passes 2 times for simplifying namespace definition
          data.each do |key, value|
            if value.elename.namespace
              SOAPGenerator.assign_ns(attrs, ns, value.elename.namespace)
            end
          end
          generator.encode_tag(name, attrs)
          generator.encode_rawstring(data.text) if data.text
          data.each do |key, value|
            generator.encode_child(ns, value, data)
          end
        else
          raise EncodingStyleError.new(
            "unknown object:#{data} in this encodingStyle")
        end
      end

encode_data_end(generator, ns, data, parent)

[Source]

    # File soap/encodingstyle/literalHandler.rb, line 85
      def encode_data_end(generator, ns, data, parent)
        name = generator.encode_name_end(ns, data)
        cr = (data.is_a?(SOAPCompoundtype) or
          (data.is_a?(SOAPElement) and !data.text))
        generator.encode_tag_end(name, cr)
      end

[Validate]