2008-12-11 8 views
2

Я создал драйвер из WSDLКак добавить name.value к заголовку при создании сообщения мыльного из рубина с soap4r

Когда я вызываю мою просьбу, я хотел бы заголовок содержит элемент , то есть, я хочу, чтобы увидеть что-то вроде следующего:

REPLACE_WITH_ACTUAL бла-бла-бла

Однако, глядя вокруг, все тал кс о подклассов SOAP :: Заголовок :: SimpleHandler и затем нагнетание экземпляр в driver.headerhandler

Однако, если я сделаю это, то я в конечном итоге с вложенным заголовком, то есть, REPLACE_WITH_ACTUAL

так что должен быть способ, чтобы просто добавить элемент к существующему headerhandler, так что я могу сделать что-то вроде

driver.headerhandler.AddElement («сессии», «123»)

но Я не могу найти способ сделать это. Я также пробовал такие вещи, как

driver.headerhandler ["session"] = "123" и другие подобные трюки, но я не могу найти способ сделать эту работу.

Глядя на driver.headerhandler.methods, я не вижу никакого очевидного механизма.

Понравился бы указатель на то, как это сделать.

ответ

1

Ну, коллега в моей команде решить эту проблему выше после того, глядя на некоторые из типичных примеров, которые я уже нашел в том числе и на http://dev.ctor.org/soap4r/browser/trunk/sample/soapheader/authheader/client2.rb

Оказывается, что тривиальное (Вздох) решение заменить

def on_simple_outbound 
    if @sessionid 
    { "sessionid" => @sessionid } 
    end 
end 

с

def on_simple_outbound 
    if @sessionid 
    @sessionid 
    end 
end 

Теперь, если вы просто назвать заголовок "сеанс" (в создании QName), вы получите unnest ed header, именно то, что я хотел.

Я думал, что приложу свое решение к своей собственной проблеме, исходя из предположения, что другие могут столкнуться с одной и той же проблемой.