2013-06-25 122 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的文档由于其开发状态而稀疏,所以我不知道上面的代码有多可靠。如果不是正确的方法,我会很高兴看到有人纠正我。