XML-RPC в Zend Framework 1.5 RC1

На днях разрабатывал для одного проекта тестовое API на основе XML-RPC. Конечно-же нужно было создать тестовую модель. Так как под рукой всегда есть PHP, я естественно взял Zend Framework 1.5 RC1 и посмотрел, что в нём есть по плану XML-RPC. Оказалось есть – Zend_XmlRpc, как клиент, так и сервер. Если посмотреть на примеры в документации – всё легко, просто и прозрачно. При первых попытках всё прошло очень и очень успешно. Как в написании клиента, так и в написании сервера. Что меня очень обрадовало и уже в ближайшие часы я сделал всю основную работу, всё работало идеально, пока я не захотел передать немного данных, закодированных по стандарту base64 (XML-RPC имеет специальный тип для этого).

Чтож, я долго долго “курил” мануал и на сегодня там нет правильных упоминаний о том, как правильно передать из клиента параметр типа base64. Нет, конечно там говорят о Zend_XmlRpc_Value_Base64, но стоит сделать new Zend_XmlRpc_Value_Base64(‘Any data passed’); как получаешь exception: Calling parameters do not match signature. Опа… (© какой-то водитель с видео). Через несколько часов я нашёл в коде, что в call можно подать массив типа array ( ‘value’ => ‘Any data passed’, ‘type’ => ‘base64’) – всё заработало. Почему в мануале не описано? Ладно, может не успели изменить мануал или изменить код под мануал, тут мы разобрались, решение правильное согласно кода Zend Framework 1.5 RC1 и отрабатывает верно.

Потом мне понадобилось из XML-RPC тоже вернуть данные, закодированные с base64. И тут у меня опять ничего не получилось. Код, возвращающий строку, массив, integer, boolean отрабатывал идеально, а return new Zend_XmlRpc_Value_Base64(‘Base64 encoded string’); возвращал массив из членов объекта, а не верно закодированный объект по спецификации XML-RPC. Чтож, я начал опять ковырять исходники. Так я доковырялся до Zend_XmlRpc_Value::_phpVarToNativeXmlRpc, в которой любой объект превращается в массив при помощи get_object_vars. Стоило добавить фактически 1 строчку кода (ок, 4 для удобного чтения кода) и одного комментария и всё заработало.

К сожалению свой патч отдать Zend’у я не могу, даже зарегистрировавшись в Issue Tracker я там ничего сделать не могу. На эл. письмо они пока не ответили. Так что тестовый Zend_XmlRpc_Server и Zend_XmlRpc_Client выкладываю у себя, там-же лежит и изменённый Zend_XmlRpc_Value, чтоб всё работало. Помните, это для Zend Framework 1.5 RC1. Может быть в финальной версии это уже исправят.

2 thoughts on “XML-RPC в Zend Framework 1.5 RC1

  1. ДанилаNo Gravatar

    Спасибо мужик, помогло. За***ся копать этот фраемворк. =)

  2. Сергей КуракинNo Gravatar Post author

    Эту проблему решили с выходом версии 1.5.0 или 1.5.1, как и поддержку NIL.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.