soap4r en-têtes personnalisés
-
08-07-2019 - |
Question
Je travaille avec soap4r et j'essaie d'utiliser SOAP :: Header :: SimpleHandler. J'essaie de le faire pour mettre un en-tête personnalisé sur le message sortant, mais je ne peux pas trouver comment obtenir inclure des attributs plutôt que des sous-éléments:
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
qui retourne:
<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>
Ce dont j'ai besoin pour revenir est le suivant:
<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>
Toute aide est grandement appréciée.
La solution
soap4r n'est pas très joli. J'ai jeté un coup d'œil autour de la commande rdocs et il semble que le moyen le plus simple de résoudre votre problème serait que on_simple_outbound
renvoie la représentation sous forme de chaîne de l'élément que vous voulez créer.
donc au lieu de
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}
essayer
%Q(<Identities xsi:type="RepositoryIdentity" userName="#{user}" password="#{password}" repositoryName="#{docbase}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>)
En utilisant quelque chose comme Builder, vous pourriez lui donner un aspect plus rubyish, mais essayez-le.
L’autre option consisterait à explorer de nouvelles bibliothèques de feuilletons. handsoap semble intéressant.