Мыло Custom XMl в рубине с савоном - PullRequest
1 голос
/ 20 апреля 2011

Мне нужно, чтобы тело запроса выглядело так:

<env:Body>

<abc:request token="0" id="1" version="4">
<category domain_id="630643"/>
</abc>

</env:Body>

Как добавить дополнительные атрибуты?

Кроме того, как изменить кодировку с UTF-8 на UTF-16? Не удалось найти это в документации.

1 Ответ

2 голосов
/ 23 апреля 2011

Тело SOAP с пользовательскими атрибутами:

client.request :abc, :request, :token => 0, :id => 1, :version => 4 do
  soap.body = {
    :category => "",
    :attributes! => { :category  => { "domain_id" => 630643 } }
  }
end

Savon::Client#request принимает пространство имен, имя вызываемого действия SOAP, а также необязательный хэш атрибутов для входного тега SOAP.

<abc:request version="4" id="1" token="0">

Атрибуты для тегов тела SOAP могут быть установлены с помощью специального :attributes! Хэша. Обратите внимание, что атрибут domain_id является строкой, поскольку символы хэш-ключа (по умолчанию) преобразуются в lowerCamelCase.

<category domain_id="630643"></category>

Также обратите внимание, что Gyoku не создал самозакрывающийся тег. Савон использует Gyoku для перевода Ruby Hashes в XML, и библиотека может создавать самозакрывающиеся теги, но, похоже, глотает пользовательские атрибуты для них (v0.4.2). Это ошибка , которая должна быть исправлена ​​в следующем выпуске.

Дополнительную информацию и примеры можно найти в новой документации.


Изменение кодировки по умолчанию

Савон использует HTTPI для выполнения HTTP-запросов, и вы можете получить доступ к HTTPI::Request объекту через Savon::Client#http. Изменение кодировки по умолчанию на UTF-16 должно быть возможно путем установки настраиваемого заголовка «Content-Type».

client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"

Обратите внимание, что это не меняет атрибут кодирования инструкции обработки xml:

<?xml version="1.0" encoding="UTF-8"?>

Посмотрите на " Отправка запроса SOAP в кодировке UTF-16 с Ruby и Savon " для получения информации об изменении инструкции обработки.

...