2011-06-02 7 views
0

Я не понимаю людей, которые предпочитают Савон в Soap4r.Как бороться с ответами Савона?

Как я могу получить атрибуты возвращаемого объекта в ответе Savon? С soap4r он так же чист, как и призыв getter!

По-видимому, в Савоне мне нужно явно разобрать ответ и пройти response_hash. Это намного хуже, чем подход soap4r. У меня что-то не так, или Савон - это просто плохое качество soap4r?

Редактировать: этот вопрос возник из-за того, что савон неправильно поддерживал ответы multi_ref, как указано в ответе на ответ.

ответ

1

От https://github.com/raldred/savon/blob/master/lib/savon/response.rb

# You can also let Savon translate the SOAP response body to a Hash. 
    # 
    # response.to_hash 
    # => { :findUserByIdResponse => { 
    # => :id => "123", 
    # => :username => "eve" 
    # => :active => true 
    # => } 

Таким образом, вы должны быть в состоянии назвать хэш [: объект], который будет возвращать атрибут.

Вам не нужно прогуливать объект ответа, просто позвонив в_что.

+0

Проблема в том, что когда я пытался это сделать, я получил сильно вложенный хэш с очень странными значениями, похожими на «#idN». Попытка сделать что-то так же просто, как response.companyId, была бы достаточно сложной, чтобы не понять, где значение этого атрибута существует в хэше. Если я не ошибаюсь, ближайший, к которому я пришел, был чем-то вроде ответа [: meta_refs] [: companyId], что вернуло что-то вроде «# id3». –

+0

В Soap4r response.companyId просто работает! Возможно, я дал неправильные параметры савону, и поэтому он не может обработать ответ соответствующим образом. поскольку я не знал, каким должно было быть пространство имен, я просто сделал что-то вроде Client.new {wsdl.document = "путь к wsdl"} –

+1

Возможно, просмотрите документацию, ваш объект ответа должен быть хорошо представлен хэш, если вы используете правильные параметры в клиенте. –