使用 Ruby 和 Savon 发送 UTF-16 编码的 SOAP 请求 [英] Send UTF-16 encoded SOAP request with Ruby and Savon

查看:32
本文介绍了使用 Ruby 和 Savon 发送 UTF-16 编码的 SOAP 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将请求编码为 UTF-16?这是我所拥有的:

  # Create Savon client
  @client = Savon::Client.new do
    wsdl.document = File.expand_path("account_list.wsdl", __FILE__)
  end

  # Set header encoding
  @client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"

  # Setup ssl configuration
  @client.http.auth.ssl.cert_key_file = "cert_key_file.pem"
  @client.http.auth.ssl.cert_file = "cert_file.pem"
  @client.http.auth.ssl.ca_cert_file = "ca_cert_file.pem"
  @client.http.auth.ssl.verify_mode=:none

  # Execute request
  response = @client.request :account_list do
    soap.body = {
      :id => "18615618"
      }
  end

这是发送的请求,注意 encoding="UTF-8":

Content-Type: text/xml;charset=UTF-16, SOAPAction: "accountList", Content-Length: 888 <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema

这是我得到的错误:

< s o a p : E n v e l o p e   x m l n s : s o a p = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / e n v e l o p e / "   x m l n s : w s>d
 < s o a p : B o d y >
   < s o a p : F a u l t >
     < f a u l t c o d e > s o a p : C l i e n t < / f a u l t c o d e >
     < f a u l t s t r i n g > F a i l e d   t o   p r o c e s s   S O A P   r e q u e s t .   S O A P   b o d y   n o t   i n   U T F - 1 6 .
< / f a u l t s t r i n g >
     < d e t a i l >
       < w s d l _ o p s : e r r o r > F a i l e d   t o   p r o c e s s   S O A P   r e q u e s t .   S O A P   b o d y   n o t   i n   U T F - 1 6 .
< / w s d l _ o p s : e r r o r >
     < / d e t a i l >
   < / s o a p : F a u l t >
 < / s o a p : B o d y >
< / s o a p : E n v e l o p e >

推荐答案

Savon 目前仅支持 通过集成的 Builder 方法更改 XML 指令标签:

Savon currently only supports changing the XML directive tag via the integrated Builder-method:

response = @client.request(:account_list) do
  soap.xml(:xml, :encoding => "UTF-16") { |xml| xml.id("18615618") }
end

尽管使用这种方法,您会错过很多 XML 支持.没有 SOAP 信封,没有标题或正文:

You'll miss out a lot of XML-support by using this approach though. No SOAP envelope, no header or body:

<?xml version="1.0" encoding="UTF-16"?><id>18615618</id>

我会尽快使用您的票想出更好的解决方案!

I'll use your ticket to come up with a better solution asap!

这篇关于使用 Ruby 和 Savon 发送 UTF-16 编码的 SOAP 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆