#python #xml-rpc #composite #recursive-datastructures #xmlrpclib
#python #xml-rpc #составной #recursive-структуры данных #xmlrpclib
Вопрос:
Мне нужно отправить объект через XML-RPC в python. Мой объект состоит из составного типа данных для заполнения древовидной структуры:
class Node(object):
'''Composite data type '''
def __init__(self, pData, pParent=None):
self.mData = pData
self.mParent = pParent
self.mChildren = []
self.mParent
является ссылкой на его родительский узел. Итак, у меня есть рекурсивные структуры данных для создания этой структуры. Когда я пытаюсь отправить этот тип данных напрямую с помощью XML-RPC, он выдает эту ошибку:
xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal recursive dictionaries">
Я думаю, что это исключение возникло из-за его сложной структуры. Поскольку xml-rpc поддерживает только базовые типы данных. Я не мог использовать словари, потому что мне нужны ссылки в моем клиентском узле. Когда я использую словари со ссылками, это выдает ту же ошибку, что и выше.
Я не мог использовать pickle, он должен быть независимым от языка.
Есть ли у вас какие-либо предложения по отправке объекта через XML-RPC изначально? Может быть, как создать мой собственный тип данных, чтобы отправить его в формате xml?
Ответ №1:
Посмотрите на
http://www.xs4all.nl /~irmen/pyro3/
когда вы хотите передавать объекты Python по проводам.
Поскольку XMLRPC основан на XML — как следует из названия — вы не можете передавать объекты Python по сети без сериализации.
Комментарии:
1. спасибо за ответ. Как вы сказали, его необходимо сериализовать в подходящих представлениях XML перед отправкой объекта. Например, когда я отправляю строковую переменную, XML-RPC автоматически генерирует переменную <string></string>. Так возможно ли также, что я сериализую свой объект в формате xml (без pickle, изменения кода в xmlrpclib) и отправляю его другому узлу?