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

Changeset 1945

Show
Ignore:
Timestamp:
09/09/07 15:09:39 (8 months ago)
Author:
nahi
Message:
  • a value of XML attribute was not properly encoded. users who did XML-encode a value in SOAPElement#extraattr should care about this change (not needed from now.) closes #416.
Files:

Legend:

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

    r1936 r1945  
    184184    ary = [] 
    185185    attrs.each do |key, value| 
    186       ary << %Q[#{ key }="#{ value }"] unless value.nil? 
     186      ary << %Q[#{ key }="#{ get_encoded(value.to_s) }"] 
    187187    end 
    188188    case ary.size 
     
    220220  EncodeCharRegexp = Regexp.new("[#{EncodeMap.keys.join}]") 
    221221  def encode_string(str) 
     222    @buf << get_encoded(str) 
     223  end 
     224 
     225  def get_encoded(str) 
    222226    if @use_numeric_character_reference and !XSD::Charset.is_us_ascii(str) 
    223227      str.gsub!(EncodeCharRegexp) { |c| EncodeMap[c] } 
    224       @buf << str.unpack("U*").collect { |c| 
     228      str.unpack("U*").collect { |c| 
    225229        if c == 0x9 or c == 0xa or c == 0xd or (c >= 0x20 and c <= 0x7f) 
    226230          c.chr 
     
    230234      }.join 
    231235    else 
    232       @buf << str.gsub(EncodeCharRegexp) { |c| EncodeMap[c] } 
     236      str.gsub(EncodeCharRegexp) { |c| EncodeMap[c] } 
    233237    end 
    234238  end 
  • trunk/test/wsdl/document/test_rpc.rb

    r1942 r1945  
    127127    struct1 = Echo_struct.new("mystring1", now1 = Time.now) 
    128128    struct1.xmlattr_m_attr = 'myattr1' 
    129     struct2 = Echo_struct.new("mystring2", now2 = Time.now) 
     129    struct2 = Echo_struct.new("mystr<>ing2", now2 = Time.now) 
    130130    struct2.xmlattr_m_attr = 'myattr2' 
    131131    echo = Echoele.new(struct1, struct2) 
    132     echo.xmlattr_attr_string = 'attr_string' 
     132    echo.xmlattr_attr_string = 'attr_str<>ing' 
    133133    echo.xmlattr_attr_int = 5 
    134134    ret = @client.echo(echo) 
     
    137137    # struct#m_datetime in a request is a Time. 
    138138    timeformat = "%Y-%m-%dT%H:%M:%S" 
    139     assert_equal("mystring2", ret.struct1.m_string) 
     139    assert_equal("mystr<>ing2", ret.struct1.m_string) 
    140140    assert_equal(now2.strftime(timeformat), 
    141141      date2time(ret.struct1.m_datetime).strftime(timeformat)) 
     
    143143    assert_equal(now1.strftime(timeformat), 
    144144      date2time(ret.struct_2.m_datetime).strftime(timeformat)) 
    145     assert_equal("attr_string", ret.xmlattr_attr_string) 
     145    assert_equal("attr_str<>ing", ret.xmlattr_attr_string) 
    146146    assert_equal(5, ret.xmlattr_attr_int) 
    147147  end 
     
    159159    } 
    160160    struct2 = { 
    161       "m_string" => "mystring2", 
     161      "m_string" => "mystr<>ing2", 
    162162      "m_datetime" => now2 = (Time.now), 
    163163      "xmlattr_m_attr" => "myattr2" 
     
    166166      :struct1 => struct1, 
    167167      "struct-2" => struct2, 
    168       :xmlattr_attr_string => 'attr_string', 
     168      :xmlattr_attr_string => 'attr_str<>ing', 
    169169      "xmlattr_attr-int" => 5 
    170170    } 
     
    173173    now1str = XSD::XSDDateTime.new(now1).to_s 
    174174    now2str = XSD::XSDDateTime.new(now2).to_s 
    175     assert_equal("mystring2", ret.struct1.m_string) 
     175    assert_equal("mystr<>ing2", ret.struct1.m_string) 
    176176    assert_equal(now2str, ret.struct1.m_datetime) 
    177177    assert_equal("mystring1", ret.struct_2.m_string) 
    178178    assert_equal(now1str, ret.struct_2.m_datetime) 
    179     assert_equal("attr_string", ret.xmlattr_attr_string) 
     179    assert_equal("attr_str<>ing", ret.xmlattr_attr_string) 
    180180    assert_equal("5", ret.xmlattr_attr_int) 
    181181  end 
     
    203203 
    204204    echo = SOAPElement.new('foo') 
    205     echo.extraattr['attr_string'] = 'attr_string' 
     205    echo.extraattr['attr_string'] = 'attr_str<>ing' 
    206206    echo.extraattr['attr-int'] = 5 
    207207    echo.add(struct1 = SOAPElement.new('struct1')) 
     
    221221    assert_equal('2005-03-17T19:47:31', 
    222222      ret.struct_2.m_datetime.strftime(timeformat)) 
    223     assert_equal('attr_string', ret.xmlattr_attr_string) 
     223    assert_equal('attr_str<>ing', ret.xmlattr_attr_string) 
    224224    assert_equal(5, ret.xmlattr_attr_int) 
    225225