2008-12-11 3 views
2

J'ai créé un pilote de wsdlComment puis-je ajouter un name.value à l'en-tête lors de la génération d'un message de savon de rubis avec soap4r

Quand j'invoque ma demande, je voudrais l'en-tête pour contenir un élément , à savoir, je veux voir quelque chose comme ce qui suit:

REPLACE_WITH_ACTUAL bla bla bla

Cependant, en regardant autour, tout le monde tal ks sur SOAP :: En-tête sous-classement :: SimpleHandler puis injecter une instance dans le driver.headerhandler

Cependant, si je fais ça, alors je me retrouve avec un en-tête imbriqué, par exemple, REPLACE_WITH_ACTUAL

donc, il doit y avoir un moyen d'ajouter simplement un élément à la headerhandler existante pour que je puisse faire quelque chose comme

driver.headerhandler.AddElement (« session », « 123 »)

mais Je ne trouve aucun moyen de le faire. J'ai également essayé des choses comme

driver.headerhandler ["session"] = "123" et d'autres trucs du genre, mais je ne trouve aucun moyen de faire fonctionner ça. En regardant les drivers.headerhandler.methods, je ne vois aucun mécanisme évident.

Apprécierait vraiment un pointeur sur la façon de cela.

Répondre

1

Eh bien, un collègue de mon équipe a résolu le problème ci-dessus après avoir regardé quelques-uns des exemples typiques que j'avais déjà trouvé, y compris celui de http://dev.ctor.org/soap4r/browser/trunk/sample/soapheader/authheader/client2.rb

s'avère que la solution triviale (soupir) est de remplacer

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

avec

def on_simple_outbound 
    if @sessionid 
    @sessionid 
    end 
end 

maintenant, si vous nommez simplement l'en-tête "session" (dans la création QName), vous obtenez le unnest en-tête ed, exactement ce que je voulais.

Je pensais coller ma solution à mon propre problème en supposant que d'autres pourraient être confrontés au même problème.

Questions connexes