在 rails 的项目里链接合作方的 SOAP。对方使用的是 GBK 字符集。
采用 builder 来构建 xml。特指了 GBK 作为 encoding。但是不太了解是否还有其他的设置需要(猜测是需要的,但是没有头绪。)
xml.instruct! :xml, version: "1.0", encoding: "GBK"
# Send the xml via SOAP
def self.send_to_metlife(fi)
# Connect to MetLife SOAP API via wsdl.
client = Savon::Client.new(wsdl: "http://XXXX-XXX.XXXX.com.cn/services/XXXXXXX?wsdl")
msg = FreeInsurance.build_xml_of_free_insurance(fi).target! # 写了个类方法来构建xml。其中和字符相关的语句在上面。那个target!是来解决一个cannot to array的错误的。
puts '-----' # 方便看log
puts msg # 方便看log
puts '-----' # 方便看log
response = client.call(:do_request, message: msg)
return response
end
运行后报错:
(soapenv:Server.userException) org.xml.sax.SAXParseException: 不允许处理指令目标匹配“[xX][mM][lL]”。
报错的语句是:
response = client.call(:do_request, message: msg)
猜测还是字符集的问题。求助。
另外:有个疑惑是竟然报错是中文的。不得解啊~
多谢!