<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yxqqc (gingko)</title>
    <link>https://ruby-china.org/yxqqc</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>ruby 2.0 中使用 ice 协议</title>
      <description>&lt;p&gt;公司以前使用的 1.8.6 的 ruby，现在要切换到 2.0，其中需要使用 ice 协议，&lt;/p&gt;

&lt;p&gt;不过 ruby2.0 中好像取消了自带的 ice，求推荐一个 2.0 中能用 ice 的 gem 包&lt;/p&gt;

&lt;p&gt;原来 1.8.6 的代码&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rubygems'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'ice.rb'&lt;/span&gt;
&lt;span class="o"&gt;........&lt;/span&gt;
&lt;span class="vi"&gt;@ic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Ice&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@ic.stringToProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"xxxxx:tcp -h &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; -p &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;.........&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ruby2.0 中有好用的 gem 包吗？或者类似的 gem 包&lt;/p&gt;</description>
      <author>yxqqc</author>
      <pubDate>Tue, 17 Jun 2014 17:42:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/20004</link>
      <guid>https://ruby-china.org/topics/20004</guid>
    </item>
    <item>
      <title>使用 savon 发送 xml 的 request 报错 Bad envelope tag:</title>
      <description>&lt;p&gt;公司以前使用的 1.8.6 的 ruby，现在要切换到 2.0，
需要对 soap 调用进行改写，2.0 没有 soap 了，只好用 savon&lt;/p&gt;

&lt;p&gt;使用的 ruby2.0 代码如下&lt;/p&gt;

&lt;p&gt;savon 的版本为 2.5.1&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Savon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; 
    &lt;span class="n"&gt;wsdl&lt;/span&gt; &lt;span class="s2"&gt;"http://10.112.222.174:13001/gateway/XXXX?wsdl"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;request id='&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' &amp;gt;
                  &amp;lt;cmd function='getTestbedList'&amp;gt;
                      &amp;lt;para name='username'&amp;gt;
                          &amp;lt;value&amp;gt;admin&amp;lt;/value&amp;gt;
                      &amp;lt;/para&amp;gt;
                      &amp;lt;para name='password'&amp;gt;
                          &amp;lt;value&amp;gt;admin&amp;lt;/value&amp;gt;
                      &amp;lt;/para&amp;gt;
                  &amp;lt;/cmd&amp;gt;
                  &amp;lt;/request&amp;gt;"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:get_testbed_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;xml: &lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;报错如下&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/response.rb:85:in `raise_soap_and_http_errors!': (soapenv:Server.userException) org.xml.sax.SAXException: Bad envelope tag:  request (Savon::SOAPFault)
    from C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/response.rb:14:in `initialize'
    from C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/operation.rb:64:in `new'
    from C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/operation.rb:64:in `create_response'
    from C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/operation.rb:55:in `call'
    from C:/Ruby200/lib/ruby/gems/2.0.0/gems/savon-2.5.1/lib/savon/client.rb:36:in `call'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用 ruby1.8.6 可以成功调用&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rubygems'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'wsdl/parser'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'wsdl/soap/wsdl2ruby'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'soap/rpc/standaloneServer'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'soap/wsdlDriver'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'jcode'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'socket'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'iconv'&lt;/span&gt;

&lt;span class="vi"&gt;@wsdl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;SOAP&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;RPC&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"http://10.112.222.174:13001/gateway/XXXX"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="vi"&gt;@wsdl.add_method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"getTestbedList"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"requestXml"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;request id='&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;' &amp;gt;
                  &amp;lt;cmd function='getTestbedList'&amp;gt;
                      &amp;lt;para name='username'&amp;gt;
                          &amp;lt;value&amp;gt;admin&amp;lt;/value&amp;gt;
                      &amp;lt;/para&amp;gt;
                      &amp;lt;para name='password'&amp;gt;
                          &amp;lt;value&amp;gt;admin&amp;lt;/value&amp;gt;
                      &amp;lt;/para&amp;gt;
                  &amp;lt;/cmd&amp;gt;
                  &amp;lt;/request&amp;gt;"&lt;/span&gt;


&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Iconv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iconv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"UTF-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;to_s&lt;/span&gt;                 

&lt;span class="vg"&gt;$KCODE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"UTF8"&lt;/span&gt;

&lt;span class="n"&gt;response_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="vi"&gt;@wsdl.call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"getTestbedList"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;response_str&lt;/span&gt;

&lt;span class="vg"&gt;$KCODE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'E'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>yxqqc</author>
      <pubDate>Fri, 06 Jun 2014 11:08:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/19779</link>
      <guid>https://ruby-china.org/topics/19779</guid>
    </item>
  </channel>
</rss>
