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

Changeset 1581

Show
Ignore:
Timestamp:
07/19/05 23:21:02 (3 years ago)
Author:
nahi
Message:

enhances for rpc/literal support. for #118.

Files:

Legend:

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

    r1580 r1581  
    4545      generator.encode_tag(name, attrs) 
    4646      data.each do |key, value| 
    47         if !value.elename.namespace 
    48           value.elename.namespace = data.elename.namespace  
    49         end 
    5047        generator.encode_child(ns, value, data) 
    5148      end 
  • trunk/lib/soap/encodingstyle/literalHandler.rb

    r1580 r1581  
    5757      generator.encode_tag(name, attrs) 
    5858      data.each do |key, value| 
    59         if !value.elename.namespace 
    60           value.elename.namespace = data.elename.namespace 
    61         end 
    6259        generator.encode_child(ns, value, data) 
    6360      end 
  • trunk/lib/soap/mapping/mapping.rb

    r1580 r1581  
    310310      if /\[\]$/ =~ class_name 
    311311        class_name = class_name.sub(/\[\]$/, '') 
    312         as_array << class_name 
    313       end 
    314       elements << [name ? name.name : varname, class_name] 
     312        as_array << (name ? name.name : varname) 
     313      end 
     314      elements << [name || XSD::QName.new(nil, varname), class_name] 
    315315    end 
    316316    [elements, as_array] 
  • trunk/lib/soap/mapping/registry.rb

    r1565 r1581  
    8888    @__xmlele.each do |k, v| 
    8989      return v if k == qname 
     90    end 
     91    # fallback 
     92    @__xmlele.each do |k, v| 
     93      return v if k.name == qname.name 
    9094    end 
    9195    nil 
  • trunk/lib/soap/mapping/wsdlencodedregistry.rb

    r1580 r1581  
    235235    vars = {} 
    236236    node.each do |name, value| 
    237       item = elements.find { |k, v| k == name } 
     237      item = elements.find { |k, v| k.name == name } 
    238238      if item 
    239         class_name = item[1] 
     239        elename, class_name = item 
    240240        if klass = Mapping.class_from_name(class_name) 
    241241          # klass must be a SOAPBasetype or a class 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1580 r1581  
    210210    if elements 
    211211      elements.each do |elename, type| 
    212         child = Mapping.get_attribute(obj, elename) 
    213         unless child.nil? 
    214           name = XSD::QName.new(nil, elename) 
    215           if as_array.include?(type) 
     212        if child = Mapping.get_attribute(obj, elename.name) 
     213          if as_array.include?(elename.name) 
    216214            child.each do |item| 
    217               ele.add(obj2soap(item, name)) 
     215              ele.add(obj2soap(item, elename)) 
    218216            end 
    219217          else 
    220             ele.add(obj2soap(child, name)) 
     218            ele.add(obj2soap(child, elename)) 
     219          end 
     220        elsif obj.is_a?(::Array) and as_array.include?(elename.name) 
     221          obj.each do |item| 
     222            ele.add(obj2soap(item, elename)) 
    221223          end 
    222224        end 
     
    291293    vars = {} 
    292294    node.each do |name, value| 
    293       item = elements.find { |k, v| k == name } 
     295      item = elements.find { |k, v| k.name == name } 
    294296      if item 
    295         class_name = item[1] 
     297        elename, class_name = item 
    296298        if klass = Mapping.class_from_name(class_name) 
    297299          # klass must be a SOAPBasetype or a class 
     
    319321        child = any2obj(value) 
    320322      end 
    321       if as_array.include?(class_name) 
     323      if as_array.include?(elename.name) 
    322324        (vars[name] ||= []) << child 
    323325      else 
     
    348350  def add_elements2plainobj(node, obj) 
    349351    node.each do |name, value| 
    350       obj.__add_xmlele_value(XSD::QName.new(nil, name), any2obj(value)) 
     352      obj.__add_xmlele_value(value.elename, any2obj(value)) 
    351353    end 
    352354  end 
  • trunk/lib/soap/rpc/proxy.rb

    r1580 r1581  
    398398        ele = Mapping.obj2soap(values[idx], mapping_registry) 
    399399        ele.elename = @doc_request_qnames[idx] 
    400         if ele.respond_to?(:qualified) 
    401           ele.qualified = @doc_request_qualified[idx] 
    402         end 
    403400        ele 
    404401      } 
  • trunk/lib/wsdl/soap/classDefCreator.rb

    r1580 r1581  
    259259  end 
    260260 
     261  DEFAULT_ITEM_NAME = XSD::QName.new(nil, 'item') 
     262 
    261263  def dump_arraydef(complextype) 
    262264    qname = complextype.name 
    263265    c = XSD::CodeGen::ClassDef.new(create_class_name(qname), '::Array') 
    264266    c.comment = "#{qname}" 
    265     type = complextype.child_type 
    266     c.def_classvar('schema_type', ndq(type.name)) 
    267     c.def_classvar('schema_ns', ndq(type.namespace)) 
     267    child_type = complextype.child_type 
     268    c.def_classvar('schema_type', ndq(child_type.name)) 
     269    c.def_classvar('schema_ns', ndq(child_type.namespace)) 
     270    child_element = complextype.find_aryelement 
     271    schema_element = [] 
     272    if child_type == XSD::AnyTypeName 
     273      type = nil 
     274    elsif child_element and (klass = element_basetype(child_element)) 
     275      type = klass.name 
     276    elsif child_type 
     277      type = create_class_name(child_type) 
     278    else 
     279      type = nil 
     280    end 
     281    if child_element 
     282      if child_element.map_as_array? 
     283        type << '[]' if type 
     284      end 
     285      child_element_name = child_element.name 
     286    else 
     287      child_element_name = DEFAULT_ITEM_NAME 
     288    end 
     289    schema_element << [child_element_name.name, child_element_name, type] 
     290    c.def_classvar('schema_element', 
     291      '[' + 
     292        schema_element.collect { |varname, name, type| 
     293          '[' + 
     294            ( 
     295              if name 
     296                varname.dump + ', [' + ndq(type) + ', ' + dqname(name) + ']' 
     297              else 
     298                varname.dump + ', ' + ndq(type) 
     299              end 
     300            ) + 
     301          ']' 
     302        }.join(', ') + 
     303      ']' 
     304    ) 
    268305    c.dump 
    269306  end 
  • trunk/lib/wsdl/soap/complexType.rb

    r1538 r1581  
    115115  end 
    116116 
     117  def find_aryelement 
     118    unless compoundtype == :TYPE_ARRAY 
     119      raise RuntimeError.new("Assert: not for array") 
     120    end 
     121    if complexcontent 
     122      if check_array_content(complexcontent.content) 
     123        return complexcontent.content.elements[0] 
     124      end 
     125    elsif check_array_content(content) 
     126      return content.elements[0] 
     127    end 
     128    nil # use default item name 
     129  end 
     130 
    117131private 
    118132 
    119133  def check_array_content(content) 
    120     content.elements.size == 1 and content.elements[0].maxoccurs != '1' 
     134    content and content.elements.size == 1 and 
     135      content.elements[0].maxoccurs != '1' 
    121136  end 
    122137 
  • trunk/test/wsdl/rpc/test-rpc-lit.wsdl

    r1569 r1581  
    44        targetNamespace="http://whitemesa.net/wsdl/rpc-lit-test" 
    55        xmlns="http://schemas.xmlsoap.org/wsdl/" 
    6         xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    76        xmlns:soap11="http://schemas.xmlsoap.org/wsdl/soap/" 
    87        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     
    327326        </binding> 
    328327 
    329         <binding name="Soap12TestRpcLitBinding" type="tns:SoapTestPortTypeRpc"> 
    330                 <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
    331  
    332                 <!-- echoStruct rpc operation --> 
    333                 <operation name="echoStruct"> 
    334                         <soap12:operation/> 
    335                         <input> 
    336                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    337                         </input> 
    338                         <output> 
    339                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    340                         </output> 
    341                 </operation> 
    342  
    343                 <!--  echoStructArray rpc operation --> 
    344                 <operation name="echoStructArray"> 
    345                         <soap12:operation/> 
    346                         <input> 
    347                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    348                         </input> 
    349                         <output> 
    350                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    351                         </output> 
    352                 </operation> 
    353  
    354                 <!-- echoStructAsSimpleTypes rpc operation --> 
    355                 <operation name="echoStructAsSimpleTypes"> 
    356                         <soap12:operation/> 
    357                         <input> 
    358                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    359                         </input> 
    360                         <output> 
    361                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    362                         </output> 
    363                 </operation> 
    364  
    365                 <!-- echoSimpleTypesAsStruct rpc operation --> 
    366                 <operation name="echoSimpleTypesAsStruct"> 
    367                         <soap12:operation/> 
    368                         <input> 
    369                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    370                         </input> 
    371                         <output> 
    372                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    373                         </output> 
    374                 </operation> 
    375  
    376                 <!-- echoNestedStruct rpc operation --> 
    377                 <operation name="echoNestedStruct"> 
    378                         <soap12:operation/> 
    379                         <input> 
    380                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    381                         </input> 
    382                         <output> 
    383                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    384                         </output> 
    385                 </operation> 
    386  
    387                 <!-- echoNestedArray rpc operation --> 
    388                 <operation name="echoNestedArray"> 
    389                         <soap12:operation/> 
    390                         <input> 
    391                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    392                         </input> 
    393                         <output> 
    394                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    395                         </output> 
    396                 </operation> 
    397  
    398                 <!-- echoStringArray rpc operation --> 
    399                 <operation name="echoStringArray"> 
    400                         <soap12:operation/> 
    401                         <input> 
    402                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    403                         </input> 
    404                         <output> 
    405                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    406                         </output> 
    407                 </operation> 
    408  
    409                 <!-- echoIntegerArray rpc operation --> 
    410                 <operation name="echoIntegerArray"> 
    411                         <soap12:operation/> 
    412                         <input> 
    413                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    414                         </input> 
    415                         <output> 
    416                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    417                         </output> 
    418                 </operation> 
    419  
    420                 <!-- echoBoolean rpc operation --> 
    421                 <operation name="echoBoolean"> 
    422                         <soap12:operation/> 
    423                         <input> 
    424                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    425                         </input> 
    426                         <output> 
    427                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    428                         </output> 
    429                 </operation> 
    430  
    431                 <!-- echoString rpc operation --> 
    432                 <operation name="echoString"> 
    433                         <soap12:operation/> 
    434                         <input> 
    435                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    436                         </input> 
    437                         <output> 
    438                                 <soap12:body use="literal" namespace="http://soapbuilders.org/rpc-lit-test" /> 
    439                         </output> 
    440                 </operation> 
    441  
    442         </binding> 
    443  
    444328        <service name="WhiteMesaSoapRpcLitTestSvc"> 
    445329 
    446                 <port name="Soap12TestRpcLitPort" binding="tns:Soap12TestRpcLitBinding"> 
    447                         <soap12:address location="http://www.whitemesa.net/soap12/test-rpc-lit"/> 
    448                 </port> 
    449330                <port name="Soap11TestRpcLitPort" binding="tns:Soap11TestRpcLitBinding"> 
    450331                        <soap11:address location="http://www.whitemesa.net/test-rpc-lit"/> 
  • trunk/test/wsdl/rpc/test_rpc_lit.rb

    r1574 r1581  
    11require 'test/unit' 
    2 require 'wsdl/parser' 
    32require 'wsdl/soap/wsdl2ruby' 
    43require 'soap/rpc/standaloneServer' 
     
    3231   
    3332    def echoStringArray(strings) 
    34       strings 
     33      # strings.stringItem => Array 
     34      ArrayOfstring[*strings.stringItem] 
    3535    end 
    3636  end 
     
    4848  def teardown 
    4949    teardown_server 
    50     File.unlink(pathname('RPC-Literal-TestDefinitions.rb')) 
    51     File.unlink(pathname('RPC-Literal-TestDefinitionsDriver.rb')) 
     50    unless $DEBUG 
     51      File.unlink(pathname('RPC-Literal-TestDefinitions.rb')) 
     52      File.unlink(pathname('RPC-Literal-TestDefinitionsDriver.rb')) 
     53    end 
    5254    @client.reset_stream if @client 
    5355  end 
     
    6870    gen.opt['force'] = true 
    6971    gen.run 
    70     require pathname('RPC-Literal-TestDefinitions.rb') 
    71     require pathname('RPC-Literal-TestDefinitionsDriver.rb') 
     72    backupdir = Dir.pwd 
     73    begin 
     74      Dir.chdir(DIR) 
     75      require pathname('RPC-Literal-TestDefinitions.rb') 
     76      require pathname('RPC-Literal-TestDefinitionsDriver.rb') 
     77    ensure 
     78      Dir.chdir(backupdir) 
     79    end 
    7280  end 
    7381 
     
    9199 
    92100  def test_wsdl 
    93     wsdl = File.join(DIR, 'test-rpc-lit.wsdl') 
     101    wsdl = pathname('test-rpc-lit.wsdl') 
    94102    @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver 
    95103    @client.endpoint_url = "http://localhost:#{Port}/" 
    96104    @client.wiredump_dev = STDOUT if $DEBUG 
    97     assert_equal(["a", "b", "c"], @client.echoStringArray(["a", "b", "c"]).item) 
     105    # response contains only 1 part. 
     106    result = @client.echoStringArray(ArrayOfstring["a", "b", "c"])[0] 
     107    assert_equal(["a", "b", "c"], result.stringItem) 
    98108  end 
    99109 
     
    101111    drv = SoapTestPortTypeRpc.new("http://localhost:#{Port}/") 
    102112    drv.wiredump_dev = STDOUT if $DEBUG 
    103     assert_equal(["a", "b", "c"], drv.echoStringArray(["a", "b", "c"])) 
     113    result = drv.echoStringArray(ArrayOfstring["a", "b", "c"])[0] 
     114    assert_equal(["a", "b", "c"], result.stringItem) 
    104115  end 
    105116end 
  • trunk/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb

    r1486 r1581  
    3939  @@schema_type = "section" 
    4040  @@schema_ns = "urn:mysample" 
     41  @@schema_element = [["item", ["Section", XSD::QName.new(nil, "item")]]] 
    4142end 
  • trunk/test/wsdl/soap/wsdl2ruby/section/test_section.rb

    r1470 r1581  
    1212 
    1313  def teardown 
    14     File.unlink(pathname("mysample.rb")) 
     14    File.unlink(pathname("mysample.rb")) unless $DEBUG 
    1515  end 
    1616