Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1898

Show
Ignore:
Timestamp:
07/21/07 17:37:00 (10 months ago)
Author:
nahi
Message:
  • add :default_ns_tag option to configure a pre-defined Namespace tag.

:default_ns : to configure namespace definitions at SOAPEnvelope.
:default_ns_tag: to configure pre-defined namespace tag.

closes #383.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/element.rb

    r1837 r1898  
    258258 
    259259  def encode(generator, ns, attrs = {}) 
    260     SOAPGenerator.assign_ns(attrs, ns, elename.namespace, SOAPNamespaceTag
     260    SOAPGenerator.assign_ns(attrs, ns, elename.namespace
    261261    name = ns.name(@elename) 
    262262    generator.encode_tag(name, attrs) 
  • trunk/lib/soap/generator.rb

    r1887 r1898  
    77 
    88 
    9 require 'xsd/ns' 
    109require 'soap/soap' 
     10require 'soap/ns' 
    1111require 'soap/baseData' 
    1212require 'soap/encodingstyle/handler' 
     
    4848    @buf = @indent = @curr = nil 
    4949    @default_ns = opt[:default_ns] 
     50    @default_ns_tag = opt[:default_ns_tag] 
    5051  end 
    5152 
     
    5960    end 
    6061 
    61     ns = XSD::NS.new 
     62    ns = SOAP::NS.new 
    6263    if @default_ns 
    6364      @default_ns.each_ns do |default_ns, default_tag| 
    6465        SOAPGenerator.assign_ns(obj.extraattr, ns, default_ns, default_tag) 
     66      end 
     67    end 
     68    if @default_ns_tag 
     69      @default_ns_tag.each_ns do |default_ns, default_tag| 
     70        ns.known_tag[default_ns] = default_tag 
    6571      end 
    6672    end 
     
    137143      if obj.is_a?(SOAPEnvelope) 
    138144        # xsi:nil="true" can appear even if dumping without explicit type. 
    139         SOAPGenerator.assign_ns(attrs, ns, 
    140           XSD::InstanceNamespace, XSINamespaceTag) 
     145        SOAPGenerator.assign_ns(attrs, ns, XSD::InstanceNamespace) 
    141146        if @generate_explicit_type 
    142           SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace, XSDNamespaceTag
     147          SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace
    143148        end 
    144149      end 
  • trunk/lib/soap/parser.rb

    r1824 r1898  
    77 
    88 
    9 require 'xsd/ns' 
    109require 'xsd/xmlparser' 
    1110require 'soap/soap' 
     11require 'soap/ns' 
    1212require 'soap/baseData' 
    1313require 'soap/encodingstyle/handler' 
     
    121121      parent_encodingstyle = lastframe.encodingstyle 
    122122    else 
    123       ns = XSD::NS.new 
     123      ns = SOAP::NS.new 
    124124      parent = ParseFrame::NodeContainer.new(nil) 
    125125      parent_encodingstyle = nil 
  • trunk/lib/soap/soap.rb

    r1888 r1898  
    1414 
    1515 
    16 VERSION = Version = '1.5.7
     16VERSION = Version = '1.5.8-SNAPSHOT
    1717PropertyName = 'soap/property' 
    1818 
     
    5959 
    6060Base64Literal = 'base64' 
    61  
    62 SOAPNamespaceTag = 'env' 
    63 XSDNamespaceTag = 'xsd' 
    64 XSINamespaceTag = 'xsi' 
    6561 
    6662MediaType = 'text/xml' 
  • trunk/lib/wsdl/parser.rb

    r1824 r1898  
    88 
    99require 'xsd/qname' 
    10 require 'xsd/ns' 
    1110require 'xsd/charset' 
    1211require 'xsd/datatypes' 
    1312require 'xsd/xmlparser' 
     13require 'soap/ns' 
    1414require 'wsdl/wsdl' 
    1515require 'wsdl/data' 
     
    7878      parent = lastframe.node 
    7979    else 
    80       ns = XSD::NS.new 
     80      ns = ::SOAP::NS.new 
    8181      parent = nil 
    8282    end 
  • trunk/lib/xsd/ns.rb

    r1824 r1898  
    1616  Namespace = 'http://www.w3.org/XML/1998/namespace' 
    1717 
     18  KNOWN_TAG = { 
     19    XSD::Namespace => 'xsd', 
     20    XSD::InstanceNamespace => 'xsi', 
     21  } 
     22 
    1823  class Assigner 
    19     def initialize 
     24    attr_reader :known_tag 
     25 
     26    def initialize(known_tag) 
     27      @known_tag = known_tag 
    2028      @count = 0 
    2129    end 
    2230 
    2331    def assign(ns) 
     32      if @known_tag.key?(ns) 
     33        return @known_tag[ns] 
     34      end 
    2435      @count += 1 
    2536      "n#{@count}" 
     
    3546  def initialize(tag2ns = nil) 
    3647    @tag2ns = tag2ns || ns_default 
     48    @ns2tag = @tag2ns.invert 
    3749    @assigner = nil 
    38     @ns2tag = {} 
    39     @ns2tag = @tag2ns.invert 
    4050    @default_namespace = nil 
    4151  end 
    4252 
     53  def known_tag 
     54    @assigner ||= Assigner.new(default_known_tag) 
     55    @assigner.known_tag 
     56  end 
     57 
    4358  def assign(ns, tag = nil) 
    44     if (tag == '') 
     59    if tag == '' 
    4560      @default_namespace = ns 
    4661      tag 
    4762    else 
    48       @assigner ||= Assigner.new 
     63      @assigner ||= Assigner.new(default_known_tag) 
    4964      tag ||= @assigner.assign(ns) 
    5065      @ns2tag[ns] = tag 
     
    6378 
    6479  def clone_ns 
    65     cloned = NS.new(@tag2ns.dup) 
     80    cloned = self.class.new(@tag2ns.dup) 
    6681    cloned.assigner = @assigner 
    6782    cloned.assign(@default_namespace, '') if @default_namespace 
     
    141156    {'xml' => Namespace} 
    142157  end 
     158 
     159  def default_known_tag 
     160    KNOWN_TAG 
     161  end 
    143162end 
    144163 
  • trunk/test/soap/test_custom_ns.rb

    r1887 r1898  
    1717  </env:Header> 
    1818  <env:Body> 
    19     <n2:test xmlns:n2="my:foo">bi</n2:test> 
     19    <n2:test xmlns:n2="my:foo" 
     20        xmlns:n3="my:bar" 
     21        n3:baz="qux">bi</n2:test> 
    2022  </env:Body> 
    2123</env:Envelope> 
     
    3234  </ENV:Header> 
    3335  <ENV:Body> 
    34     <myns:test>bi</myns:test> 
     36    <myns:test xmlns:bar="my:bar" 
     37        bar:baz="qux">bi</myns:test> 
    3538  </ENV:Body> 
    3639</ENV:Envelope> 
     
    4447    body = SOAP::SOAPBody.new() 
    4548    bi = SOAP::SOAPElement.new(XSD::QName.new("my:foo", "bodyitem"), 'bi') 
     49    bi.extraattr[XSD::QName.new('my:bar', 'baz')] = 'qux' 
    4650    body.add("test", bi) 
    4751    env = SOAP::SOAPEnvelope.new(header, body) 
     
    5054    result = SOAP::Processor.marshal(env, opt) 
    5155    assert_equal(NORMAL_XML, result) 
    52     # ns customize 
     56    # Envelope ns customize 
    5357    ns = XSD::NS.new 
    5458    ns.assign(SOAP::EnvelopeNamespace, 'ENV') 
    5559    ns.assign('my:foo', 'myns') 
    56     opt = { :default_ns => ns } 
     60    # tag customize 
     61    tag = XSD::NS.new 
     62    tag.assign('my:bar', 'bar') 
     63    opt = { :default_ns => ns, :default_ns_tag => tag } 
    5764    result = SOAP::Processor.marshal(env, opt) 
    5865    assert_equal(CUSTOM_NS_XML, result)