Como faço para criar um envelope SOAP em Ruby?

votos
1

Eu estou usando Savon para construir o cliente, mas quero kno como criar o envelope actual.

Estou pensando em usar Nokogiri XML Builder e apenas passar nos valores, mas não tenho certeza se esse é o caminho certo.

As especificações de SOAP envelope pode ser encontrada aqui:

http://api.postalmethods.com/PostalWS.asmx?op=UploadFile

Publicado 04/06/2010 em 05:59
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

Minha resposta seria: Não.

Savon criará automaticamente um envelope para você. Você pode passar tudo o cabeçalho e corpo que você quer, como arrays e hashes ou cordas XML. Você pode manipular namespaces (padrão) existentes e até mesmo substituir as ações de entrada. Eu não sei por que alguém precisaria construir um envelope SOAP em um analisador XML como nokogiri.

Se sua razão para não querer usar Savon para construir o envelope é que ela não tem algum tipo de funcionalidade que o endpoint requer, deixe-me saber o que é o problema exato. Eu tive que fazer uma quantidade bastante significativa de mudanças para Savon no passado para satisfazer certas APIs, então as chances são de que já tenho um patch para você. E se não, eu certamente pode apontar na direção certa para que você crie seu próprio patch.

E se você ainda precisa construir um envelope fora de Savon, eu recomendo que você não usa Savon em tudo e simplesmente enviar o XML através de uma das muitas libs grandes http lá fora.

EDITAR:

Para ilustrar como usar cabeçalhos SOAP (e namespaces), você pode incluí-los, bem como corpo no método de solicitação:

client = Savon::Client.new "http://url.to/wsdl"

response = client.get do |soap|
  # Use merge! for namespaces so that you don't overwrite all of the original namespaces (while still retaining the ability to overwrite individual ones)
  soap.namespaces.merge!({
    "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
    "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema"
  })

  # Use soap.header just like you would soap.body
  soap.header = {
    # SOAP header hash
  }

  # soap.body as usual
  soap.body = {
    # SOAP body hash
  }
end
Respondeu 04/06/2010 em 09:06
fonte usuário

votos
1

Savon trata entradas para serviços SOAP como aninhadas hashes. O envelope é construído por Savon para que você geralmente não precisa se preocupar muito sobre isso, se em tudo.

Você realmente conseguiu se conectar ao serviço ainda e se não o que erros você está recebendo?

Se você ainda não tiver conectado e / ou estão a ter alguns problemas com o conceito de como fazer isso da seguinte deve começar.

require 'savon'

client = Savon::Client.new http://api.postalmethods.com/PostalWS.asmx?wsdl
response = client.UploadFile do |soap|
  soap.body = {
    "Username" => "My User",
    "Password" => "My password"
    ...
  }
end

Se você preencher os espaços em branco na ... esta deve começar embora analisar o wsdl não pode ser o caminho a percorrer para a frente na produção. Ter um olhar para a documentação Savon para questões específicas que você recebe.

Editar

Se você não tem certeza sobre Savon e SOAP, em seguida, você pode simplesmente usar a gema postalmethods como descrito aqui , em vez de re-inventar a roda

Respondeu 04/06/2010 em 09:14
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more