soap4r benutzerdefinierte Header
-
08-07-2019 - |
Frage
Ich habe mit soap4r arbeiten und versuchen, die SOAP zu verwenden :: Rubrik :: SimpleHandler, ich versuche, es zu bekommen einen benutzerdefinierten Header auf der abgehenden Nachricht zu setzen, aber ich kann nicht herausfinden, wie man es sind Attribute nicht als Unterelemente:
class ServiceContext < SOAP::Header::SimpleHandler
NAMESPACE = "http://context.core.datamodel.fs.documentum.emc.com/"
def initialize()
super(XSD::QName.new(NAMESPACE, 'ServiceContext'))
XSD::QName.new(nil, "Identities")
end
def on_simple_outbound
username = "username"
password = "password"
docbase = "Test"
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}
end
end
, die zurückgibt:
<n1:ServiceContext xmlns:n1="http://context.core.datamodel.fs.documentum.emc.com/"
env:mustUnderstand="0">
<n1:Identities>
<n1:Username>username</n1:Username>
<n1:Password>password</n1:Password>
<n1:Docbase>Test</n1:Docbase>
</n1:Identities>
</n1:ServiceContext>
, was ich brauche es zurückkehrt, ist die folgende:
<ServiceContext xmlns="http://context.core.datamodel.fs.documentum.emc.com/">
<Identities xsi:type="RepositoryIdentity" userName="_USER_" password="_PWD_" repositoryName="_DOCBASE_" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ServiceContext>
Jede Hilfe wird sehr geschätzt.
Lösung
soap4r ist nicht sehr hübsch. Ich stocherte den rdocs abit und es sieht aus wie der einfachste Weg, um Ihr Problem zu beheben wäre, die String-Darstellung des Elements Sie erstellen möchten, haben on_simple_outbound
zurück.
so anstelle von
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}
Versuch
%Q(<Identities xsi:type="RepositoryIdentity" userName="#{user}" password="#{password}" repositoryName="#{docbase}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>)
so etwas wie Builder verwenden, Sie könnten es mehr rubyish aussehen, aber versuchen.
Die andere Option wäre neuere Seife Bibliotheken zu untersuchen. Handseife sieht interessant aus.