Я реализую интерфейс 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 преобразуется в
<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.
Есть подсказка, совет?Заранее спасибо