savon gem 和特殊字符的问题
problem with savon gem and special characters
我正在实现一个 ruby 连接到一个名为 yardi 的特殊数据库的 soap 服务接口。为此,我使用 savon gem.
许多必需的服务已经实现。然而,yardi 中的一些服务需要一个完全 XML 符合给定 yardi 提供的 xds 的参数。我在使用这些服务时遇到问题。
问题根本在于savon修改了接收到的xml,修改了一些字符;例如 <
、>
、"
等
这是 xml 传递给服务的真实示例:
<YsiTran xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""><Charges><Charge><Amount>100.0</Amount><AccountId>49610000</AccountId><ChargeCodeId>rentr</ChargeCodeId><Date>2017-01-23T00:00:00</Date><Notes>Charge with segments</Notes><PersonId>t0001306</PersonId><PostMonth>2017-04-01</PostMonth><PropertyId>385pa</PropertyId><Reference>Internet</Reference><UnitId>B3</UnitId><Segment1>collect</Segment1><Segment2>Technical</Segment2><Segment3>After due date</Segment3><Segment4>NA</Segment4><Segment5>IT</Segment5><Segment6>Owner</Segment6><Segment7>Testing</Segment7><Segment8>Testing</Segment8><Segment9>Employee</Segment9><Segment10>Sigma</Segment10><Segment11>January</Segment11><Segment12>Block 1</Segment12></Charge></Charges></YsiTran>
我很确定这个 xml 是正确的,因为我已经使用 SoapUI 对其进行了测试。也就是说,当我使用给定的 xml 将 xml 放入 SoapUI 时,服务会正确响应。
现在,当我将之前的 xml 放入 savon 并看到请求时,我注意到 xml 已转换为
<YsiTran xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""><Charges><Charge><Amount>100.0</Amount><AccountId>49610000</AccountId><ChargeCodeId>rentr</ChargeCodeId><Date>2017-01-23T00:00:00</Date><Notes>Charge with segments</Notes><PersonId>t0001306</PersonId><PostMonth>2017-04-01</PostMonth><PropertyId>385pa</PropertyId><Reference>Internet</Reference><UnitId>B3</UnitId><Segment1>collect</Segment1><Segment2>Technical</Segment2><Segment3>After due date</Segment3><Segment4>NA</Segment4><Segment5>IT</Segment5><Segment6>Owner</Segment6><Segment7>Testing</Segment7><Segment8>Testing</Segment8><Segment9>Employee</Segment9><Segment10>Sigma</Segment10><Segment11>January</Segment11><Segment12>Block 1</Segment12></Charge></Charges></YsiTran>
有人可能会注意到,由于我忽略 savon 的原因更改了一些符号。
我正在执行这样的请求:
client.call(service_name.intern,
message: { # other parameters
'TransactionXml' => transaction_xml })
client
是一个 savon 对象,transaction_xml
是一个包含 xml.
的 ruby 字符串
有什么线索吗?提前致谢
如果您有一条 XML 消息,但无法将其与 Savon 的 ruby 对象一起使用,那么您可以像这样逐字发送 XML:
client.call(service_name.intern, xml: "<tag1>values</tag1>")
文档中描述了详细信息http://savonrb.com/version2/locals.html
我正在实现一个 ruby 连接到一个名为 yardi 的特殊数据库的 soap 服务接口。为此,我使用 savon gem.
许多必需的服务已经实现。然而,yardi 中的一些服务需要一个完全 XML 符合给定 yardi 提供的 xds 的参数。我在使用这些服务时遇到问题。
问题根本在于savon修改了接收到的xml,修改了一些字符;例如 <
、>
、"
等
这是 xml 传递给服务的真实示例:
<YsiTran xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""><Charges><Charge><Amount>100.0</Amount><AccountId>49610000</AccountId><ChargeCodeId>rentr</ChargeCodeId><Date>2017-01-23T00:00:00</Date><Notes>Charge with segments</Notes><PersonId>t0001306</PersonId><PostMonth>2017-04-01</PostMonth><PropertyId>385pa</PropertyId><Reference>Internet</Reference><UnitId>B3</UnitId><Segment1>collect</Segment1><Segment2>Technical</Segment2><Segment3>After due date</Segment3><Segment4>NA</Segment4><Segment5>IT</Segment5><Segment6>Owner</Segment6><Segment7>Testing</Segment7><Segment8>Testing</Segment8><Segment9>Employee</Segment9><Segment10>Sigma</Segment10><Segment11>January</Segment11><Segment12>Block 1</Segment12></Charge></Charges></YsiTran>
我很确定这个 xml 是正确的,因为我已经使用 SoapUI 对其进行了测试。也就是说,当我使用给定的 xml 将 xml 放入 SoapUI 时,服务会正确响应。
现在,当我将之前的 xml 放入 savon 并看到请求时,我注意到 xml 已转换为
<YsiTran xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns=""><Charges><Charge><Amount>100.0</Amount><AccountId>49610000</AccountId><ChargeCodeId>rentr</ChargeCodeId><Date>2017-01-23T00:00:00</Date><Notes>Charge with segments</Notes><PersonId>t0001306</PersonId><PostMonth>2017-04-01</PostMonth><PropertyId>385pa</PropertyId><Reference>Internet</Reference><UnitId>B3</UnitId><Segment1>collect</Segment1><Segment2>Technical</Segment2><Segment3>After due date</Segment3><Segment4>NA</Segment4><Segment5>IT</Segment5><Segment6>Owner</Segment6><Segment7>Testing</Segment7><Segment8>Testing</Segment8><Segment9>Employee</Segment9><Segment10>Sigma</Segment10><Segment11>January</Segment11><Segment12>Block 1</Segment12></Charge></Charges></YsiTran>
有人可能会注意到,由于我忽略 savon 的原因更改了一些符号。
我正在执行这样的请求:
client.call(service_name.intern,
message: { # other parameters
'TransactionXml' => transaction_xml })
client
是一个 savon 对象,transaction_xml
是一个包含 xml.
有什么线索吗?提前致谢
如果您有一条 XML 消息,但无法将其与 Savon 的 ruby 对象一起使用,那么您可以像这样逐字发送 XML:
client.call(service_name.intern, xml: "<tag1>values</tag1>")
文档中描述了详细信息http://savonrb.com/version2/locals.html