2013-06-25 158 views
0

我on Rails的3 web應用程序上的Web服務,我消費,使用SAVON 3這種方法呼叫Webservice的方法

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:gpa="http://schemas.datacontract.org/2004/07/Gpa.Comercio.Servicos.Contracts.DTO"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:CalcularCarrinho> 
     <!--Optional:--> 
     <tem:carrinho> 
      <!--Optional:--> 
      <gpa:CEP>parameter here</gpa:CEP> 
      <!--Optional:--> 
      <gpa:CNPJ>parameter here</gpa:CNPJ> 
      <!--Optional:--> 
      <gpa:IdCampanha> parameter here </gpa:IdCampanha> 
      <!--Optional:--> 
      <gpa:Produtos> 
       <!--Zero or more repetitions:--> 
       <gpa:DadosListaProdutoCarrinhoDTO> 
        <!--Optional:--> 
        <gpa:Codigo> parameter here </gpa:Codigo> 
        <!--Optional:--> 
        <gpa:Quantidade>parameter here</gpa:Quantidade> 
       </gpa:DadosListaProdutoCarrinhoDTO> 
      </gpa:Produtos> 
     </tem:carrinho> 
     </tem:CalcularCarrinho> 
    </soapenv:Body> 
</soapenv:Envelope> 

我應該如何對這個方法的調用,考慮到「Produtos」參數是一個數組? 我想:

client.call(:calcular_carrinho){message(id_campanha: 2543, cnpj: '93.528.261/0001-60', cep: '04080013', produtos: ['379457', 1])} 

P.S:我用的soapUI做測試和服務工作...

回答

0

我解決這個問題!

這種方法的調用:

client = Savon.client(wsdl: "webserviceadress?wsdl") 

message = { :carrinho => {cep: '04080013',cnpj: '93.528.261/0001-60', id_campanha: 2543, :produtos => {:dados_lista_produto_carrinho_dto => {codigo: '379457', quantidade: 1}}}} 

calc_carrinho = client.call(:method_name, message: message) 
0

根據您的問題聲明我假設你想使用寶石薩翁第3版。 Savon 3的語法接口不同於2.x中使用的語法接口。

您需要先創建一個Savon對象,然後用相應的服務/端口數據創建一個operation

client   = Savon.new('http://link_to_your_wsdl_here') 
operation  = client.operation('ServiceName', 'Port', 'custom_action_here') 
operation.body = { message: {} } 

然後您可以通過operation.call啓動請求。

由於Savon 3的文檔由於其開發狀態而稀疏,所以我不知道上面的代碼有多可靠。如果不是正確的方法,我會很高興看到有人糾正我。