проблема с savon gem и специальными символами - PullRequest
0 голосов
/ 12 сентября 2018

Я реализую интерфейс ruby ​​для мыльных сервисов, подключающихся к специальной базе данных под названием yardi.Для этого я использую самоцвет savon.

Многие необходимые сервисы уже реализованы.Тем не менее, некоторые сервисы в yardi требуют в качестве параметра полного XML-кода, соответствующего заданному ярду 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 в SoapUI с указанным xml, служба отвечает правильно.

Теперь, когда я помещаю предыдущий xml в savon и вижу запрос, я замечаю, что xml преобразуется в

&lt;YsiTran xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;&quot;&gt;&lt;Charges&gt;&lt;Charge&gt;&lt;Amount&gt;100.0&lt;/Amount&gt;&lt;AccountId&gt;49610000&lt;/AccountId&gt;&lt;ChargeCodeId&gt;rentr&lt;/ChargeCodeId&gt;&lt;Date&gt;2017-01-23T00:00:00&lt;/Date&gt;&lt;Notes&gt;Charge with segments&lt;/Notes&gt;&lt;PersonId&gt;t0001306&lt;/PersonId&gt;&lt;PostMonth&gt;2017-04-01&lt;/PostMonth&gt;&lt;PropertyId&gt;385pa&lt;/PropertyId&gt;&lt;Reference&gt;Internet&lt;/Reference&gt;&lt;UnitId&gt;B3&lt;/UnitId&gt;&lt;Segment1&gt;collect&lt;/Segment1&gt;&lt;Segment2&gt;Technical&lt;/Segment2&gt;&lt;Segment3&gt;After due date&lt;/Segment3&gt;&lt;Segment4&gt;NA&lt;/Segment4&gt;&lt;Segment5&gt;IT&lt;/Segment5&gt;&lt;Segment6&gt;Owner&lt;/Segment6&gt;&lt;Segment7&gt;Testing&lt;/Segment7&gt;&lt;Segment8&gt;Testing&lt;/Segment8&gt;&lt;Segment9&gt;Employee&lt;/Segment9&gt;&lt;Segment10&gt;Sigma&lt;/Segment10&gt;&lt;Segment11&gt;January&lt;/Segment11&gt;&lt;Segment12&gt;Block 1&lt;/Segment12&gt;&lt;/Charge&gt;&lt;/Charges&gt;&lt;/YsiTran&gt;

Как кто-то мог заметить, по той причине, что я игнорирую, savon изменил некоторые символы.

Я выполняю запрос примерно так:

client.call(service_name.intern, 
            message: { # other parameters
                       'TransactionXml' => transaction_xml })

client - это объект savon, а transaction_xml - строка рубина, содержащая xml.

Есть подсказка, совет?Заранее спасибо

1 Ответ

0 голосов
/ 12 сентября 2018

Если у вас есть сообщение XML и вы не можете заставить его работать с рубиновыми объектами Savon, вы можете отправить дословный XML следующим образом:

client.call(service_name.intern, xml: "<tag1>values</tag1>")

Подробности описаны в документации http://savonrb.com/version2/locals.html

...