2015-08-27 103 views
0

我正在使用savon版本2.2來調用某些SOAP服務。對於簡單的服務,一切正常。然而一個服務具有類似於與兩個重複基團下面的例子中的複雜結構和對每個組屬性:如何使用Savon將屬性添加到嵌套的XML數組中?

<sch:RequestControl> 
<sch:requestID>6989668868</sch:requestID> 
</sch:RequestControl> 
<sch:InquiryParam> 
    <sch:crmParam name="AccountNumber">1234567</sch:crmParam> 
    <sch:crmParam name="History">1</sch:crmParam> 
</sch:InquiryParam> 

我的當前消息看起來像這樣:

<RequestControl> 
    <requestID>6989668868</requestID> 
    </RequestControl> 
    <InquiryParam> 
    <crmParam>1234567</crmParam> 
    <attributes> 
     <crmParam> 
     <name>AccountNumber</name> 
     </crmParam> 
    </attributes> 
    </InquiryParam> 
    <InquiryParam> 
    <crmParam>1</crmParam> 
    <attributes> 
     <crmParam> 
     <name>History</name> 
     </crmParam> 
    </attributes> 
    </InquiryParam> 

上面使用此邏輯產生:

message = { :RequestControl => 
       { :requestID => 6989668868 }, 

      :InquiryParam => [ 
       { :crmParam => { :content! => @account_number } , 
        :attributes => { "crmParam" => {"name" => "AccountNumber"} }  }, 

       { :crmParam => { :content! => @history } , 
        :attributes => { "crmParam" => {"name" => "History"} }  } ] 
     } 

我試着用:crmParam => { :content! => @account_number, :attributes => {'name'=>'AccountNumber'} }和類似的基礎上,薩翁和gyoku文檔的各種組合,但已運行到磚牆讓XML像例子一樣格式化。我知道我可以通過將其分配給xml來蠻力,但是這使得很難看到發生了什麼。

任何人都可以提出一個修補程序,使其具有crmParam標記內的屬性嗎?

回答

0

我不確定Savon如何處理Ruby數組,但以下腳本應該會讓您更好地瞭解您可以執行的操作。

require 'savon' 

c = Savon.client(endpoint: "http://www.example.com", 
       namespace: "urn:ns.example.com", 
       log: true, 
       log_level: :debug, 
       pretty_print_xml: true) 

r = c.call(:call, 
      :message => { 
        :InquiryParam => [ 
         {"crmParam" => 123, 
         :attributes! => { "crmParam" => { "name" => "AccountNumber" }}}, 
         {"crmParam" => 456, 
         :attributes! => { "crmParam" => { "name" => "history" }}} 
         ] 
        } 
相關問題