我正在使用ruby和Savon 2.我获得了以下SOAP示例:
POST /WebApi/Services/b2bapi.asmx HTTP/1.1
Host: api.nationsphotolab.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "https://api.nationsphotolab.com/AddNewOrder"
<?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>
<AddNewOrder xmlns="http://api.nationsphotolab.com/">
<orderXml>string</orderXml>
<passport>
<Source>string</Source>
<Hash>string</Hash>
</passport>
</AddNewOrder>
</soap:Body>
</soap:Envelope>
我尝试了许多不同的创建XML的方法,首先使用XmlMarkup构建器,然后只构建一个哈希并将其传递给savon客户端调用。
我得到的错误:
Savon::SOAPFault ((soap:Server) Server was unable to process request. ---> Object reference not set to an instance of an object.):
以下是请求:
client = Savon.client(wsdl: "http://api.nationsphotolab.com/WebApi/Services/b2bapi.asmx?wsdl")
response = client.call(:add_new_order, message: data)
数据是使用XmlMarkup构建器创建的XML。 附件是数据截图。
如果我能提供更多信息,请告诉我
谢谢!
答案 0 :(得分:0)
从您的描述看起来,API似乎期望orderXML
元素是一个字符串。我认为问题在于,当API期望它包含字符串时,您将XML放入orderXML
元素。
转义orderXML
元素的内容并将其作为字符串发送应该可以解决问题。
下面的代码显示了一种转义XML字符串的方法:
order_xml_string.encode(xml: :text)