ruby - 从 Savon SOAP 请求中删除命名空间

标签 ruby xml soap savon

我的代码使用 Savon我正在努力开始工作。

require "savon"
require "time"

Gyoku.configure do |config|
  config.convert_symbols_to(&:tap)
end

client = Savon::Client.new("https://www.cfhdocmail.com/TestAPI2/DMWS.asmx?WSDL")

response = client.request(:CreateMailing) do
  soap.body = {
    Username: "Username",
    Password: "Password",
    ProductType: "A4Letter",
    IsMono: false,
    IsDuplex: true,
    DespatchASAP: false,
    DespatchDate: Time.parse("2012-04-09"),
    AddressNameFormat: "Full Name",
    ReturnFormat: "JSON"
  }
end

输出看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="https://www.cfhdocmail.com/LiveAutoAPI/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="https://www.cfhdocmail.com/LiveAutoAPI/">
    <env:Body>
        <ins0:CreateMailing>
            <ins0:Username>Username</ins0:Username>
            <ins0:Password>Password</ins0:Password>
            <ins0:ProductType>A4Letter</ins0:ProductType>
            <ins0:IsMono xsi:nil="true" />
            <ins0:IsDuplex>true</ins0:IsDuplex>
            <ins0:DespatchASAP xsi:nil="true" />
            <ins0:DespatchDate>2012-04-09 00:00:00 +0200</ins0:DespatchDate>
            <ins0:AddressNameFormat>Full Name</ins0:AddressNameFormat>
            <ins0:ReturnFormat>JSON</ins0:ReturnFormat>
        </ins0:CreateMailing>
    </env:Body>
</env:Envelope>

但我希望它看起来像这样。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CreateMailing xmlns="https://www.cfhdocmail.com/LiveAutoAPI/">
      <Username>Username</Username>
      <Password>Password</Password>
      <ProductType>A4Letter</ProductType>
      <IsMono/>true</IsMono>
      <IsDuplex>true</IsDuplex>
      <DespatchASAP>false</DespatchASAP>
      <DespatchDate>2012-04-09 00:00:00 +0200</DespatchDate>
      <AddressNameFormat>Full Name</AddressNameFormat>
      <ReturnFormat>JSON</ReturnFormat>
    </CreateMailing>
  </soap:Body>
</soap:Envelope>

我该怎么做?

我现在收到此错误

Server did not recognize the value of HTTP Header SOAPAction: CreateMailing. (Savon::SOAP::Fault)

最佳答案

这些更改解决了我的问题。

client.request(:web, "CreateMailer") do |soap|
  soap.input = [
    "CreateMailer", { 
      xmlns: "https://www.cfhdocmail.com/LiveAutoAPI/"
    }
  ]
  soap.element_form_default = :unqualified
  soap.body = {
    Username: "Username",
    Password: "Password",
    ProductType: "A4Letter",
    IsMono: false,
    IsDuplex: true,
    DespatchASAP: false,
    DespatchDate: Time.parse("2012-04-09"),
    AddressNameFormat: "Full Name",
    ReturnFormat: "JSON"
  }
  client.http.headers.delete("SOAPAction")
end

谢谢@sluukkonen寻求帮助。

关于ruby - 从 Savon SOAP 请求中删除命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063571/

相关文章:

java - 如何在soap ui中按id顺序获取输出

php - 获取 Salesforce 自定义字段值

ruby - 在 Ruby 中内存具有多个参数的函数

c# - 用于选择名称以以下开头的节点的 XPath

php - 创建一个函数来替换从 XML 文件获取的字符串

xml - Google 环聊应用程序配置给出应用程序 URL 错误

java - android ksoap2 java.lang.IllegalArgumentException : size <= 0

c# - 将 Ruby 转换为 C#

mysql - Rails 3 自动创建联接表关联

ruby - Redis - 为什么这段代码这么快?