我使用Savon gem和Ruby将请求发布到wsdl webservice。问题是,当我发送请求时,响应显示响应没问题,但是我在请求中发送了一个项目,在开发团队的帮助下,我可以看到webservice得到没有项目的请求,所以我可以认为我对请求格式或数据做错了。因为我使用Savon 2 stable我无法看到请求xml Savon直接发送
该项目是最后一项," promotion_rules"之一。
@result = @client.call(
:create_template, message: {
:item => [{
'promotion_id' => 1,
'initial_quantity' => 0,
:products => [{
:product => {
'id' => 3,
'quantity' => 1
}
}],
:lists => [{
:list => [
0,
1,
2
]
}],
:promotion_rules => [{
:promotion_rule => {
'code' => "NEW_USER",
'value' => 1
}
}]
}]
}
)
我得到的回应是:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.test.enterprise.com">
<SOAP-ENV:Body>
<ns1:createTemplateResponse>
<item>
<response>
<code>000</code>
<description>Aprobada</description>
<ticket>99999999</ticket>
</response>
<attention>
<begin>2016-12-23 10:49:50</begin>
<end>2016-12-23 10:49:50</end>
<time>0.2</time>
</attention>
<template_id>901</template_id>
</item>
</ns1:createTemplateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
该项目所需的具体数据如下:
<xsd:element name="promotion_rules" maxOccurs="1" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="promotion_rule" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="code" type="xsd:string"/>
<xsd:element name="value" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
提前谢谢。
答案 0 :(得分:1)
如果没有wsdl文件或至少wsdl文件中的完整类型定义(例如Item),则无法检查有效负载的正确性。
根据你的调试输出问题:你检查过savon的调试输出吗? Savon可以使用以下配置将您的请求和响应xml有效负载打印到控制台:
Rails.logger = Logger.new(STDOUT)
Rails.logger.level = LOGGER::DEBUG
那么你的savon配置应该包括
savon_config = {
...
log: true,
logger: Rails.logger,
...
}
也许这会帮助您调试请求 - 有效负载?
答案 1 :(得分:0)
在指定的数组和元素的方式中发现了问题,而不是:element应该是'element':
'promotion_rules' => [{
'promotion_rule' => {
'code' => "NEW_USER_RULE",
'value' => 1
}
}]
而不是:
:promotion_rules => [{
:promotion_rule => {
'code' => "NEW_USER_RULE",
'value' => 1
}
}]