Ma réponse serait: Ne pas.
Savon crée automatiquement une enveloppe pour vous. Vous pouvez passer n'importe quel en-tête et corps que vous voulez, comme des tableaux et des hachages ou des chaînes XML. Vous pouvez manipuler les espaces de noms existants (par défaut) et même remplacer les actions d'entrée. Je ne sais pas pourquoi quelqu'un aurait besoin de construire une enveloppe SOAP dans un analyseur XML tel que nokogiri.
Si la raison pour laquelle vous ne voulez pas utiliser Savon pour construire l'enveloppe est qu'il manque une sorte de fonctionnalité que le point de terminaison nécessite, faites-moi savoir quel est le problème exact. J'ai dû faire un certain nombre de changements à Savon dans le passé pour satisfaire certaines API, donc j'ai probablement déjà un correctif pour vous. Et sinon, je peux certainement vous orienter dans la bonne direction pour que vous puissiez créer votre propre patch.
Et si vous avez encore besoin de construire une enveloppe en dehors de Savon, je vous recommande de ne pas utiliser du tout Savon et d'envoyer simplement le XML via l'une des nombreuses librairies http superbes.
EDIT:
Pour illustrer comment utiliser les en-têtes SOAP (et les espaces de noms), vous pouvez les inclure ainsi que le corps dans la méthode de requête:
client = Savon::Client.new "http://url.to/wsdl"
response = client.get do |soap|
# Use merge! for namespaces so that you don't overwrite all of the original namespaces (while still retaining the ability to overwrite individual ones)
soap.namespaces.merge!({
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
"xmlns:xsd" => "http://www.w3.org/2001/XMLSchema"
})
# Use soap.header just like you would soap.body
soap.header = {
# SOAP header hash
}
# soap.body as usual
soap.body = {
# SOAP body hash
}
end
merci, je voudrais utiliser Savon, mais quand j'ai vérifié la documentation, je n'étais pas clair qu'il mettrait les en-têtes dedans. Fondamentalement je dois seulement mettre le corps et n'importe quoi en dehors des têtes de savon en utilisant Savon? –
Angela
Angela, il est très possible de spécifier les en-têtes SOAP. S'il vous plaît voir mon édition pour voir comment. – vonconrad