Rails Savon 2 传送 SOAP wsdl 出错

xujianmin · 2015年08月23日 · 最后由 xujianmin 回复于 2015年08月24日 · 2248 次阅读

在 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)

猜测还是字符集的问题。求助。

另外:有个疑惑是竟然报错是中文的。不得解啊~

多谢!

http://savonrb.com/version2/locals.html 补充下,这个链接里有复杂 xml 的构造法,但试了似乎也没有效果,不知道是不是不得法啊。

你的错误是 request 发送前的错误,还是服务返回后发生的错误?

#2 楼 @mueven 在联系对面的 IT,感觉是返回的。因为从来没有在本地配置过中文的信息。但报了个中文错误。

再次补充。message 这个参数,改成 xml 之后。response = client.call(:do_request, xml: msg),倒是没有 -- 不允许处理指令目标匹配“[xX][mM][lL]”的错误了。但有了下面的错误:(soapenv:Server.userException) org.xml.sax.SAXException: Bad envelope tag: Records。注 Records 是构建的 xml 最外层的标签。

先更新下,似乎服务器端有问题。等联调结果吧。 另外,这个报错应该是服务器端的报错。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号