4 Stimmen

SOAP-Client für Ruby 1.9 und Rails

Bisher habe ich soap4r als meinen SOAP-Client mit Ruby 1.8.x verwendet, aber jetzt wechsle ich zu Ruby 1.9.x. Leider funktioniert soap4r nicht mit Ruby 1.9.x. Ich erhalte nur den Fehler "ungültiger Multibyte-Escapesequenz", der anscheinend nicht lösbar ist, hauptsächlich weil das soap4r-Gem seit 2007 nicht mehr aktualisiert wurde, also gehe ich davon aus, dass das Projekt tot ist.

Ich habe mir Handsoap angesehen, aber dort muss ich alles von Hand zuordnen. Es würde mehrere Tage dauern, um das von Hand zu erledigen, da es sich um eine umfangreiche API handelt.

Gibt es einen anderen SOAP-Client, der automatisch alle SOAP-XML-Daten auf Ruby-Objekte abbildet (wie es soap4r getan hat) und umgekehrt?

5voto

rubiii Punkte 1926

Savon abstrahiert den XML-Teil in einen Ruby-Hash. Schauen Sie mal: http://github.com/rubiii/savon

0 Stimmen

Ich habe das nie verstanden, aber jetzt sehe ich, wie es funktioniert. Wie auch immer, es gibt immer noch ein Problem, es verliert alle XML-Attribute wie mein Inhalt. Aber ich kann das XML nehmen und es mit XmlSimple.xml_in(response.to_xml, { 'ForceArray' => false }) analysieren. Danke, dass du mich in die richtige Richtung gewiesen hast!

0 Stimmen

Leider hast du recht. Savon verwendet das Crack-Gem von John Nunemacker, um das XML in einen Hash zu übersetzen. Das Problem mit Attributen ist ein bekannter Fehler in der Crack-Bibliothek.

3voto

nas Punkte 3676

Wenn das das Problem mit Handseife ist, können Sie das Hashie-Edelstein mit Handseife verwenden. Hashie wandelt die XML-Elemente in Instanzmethodenaufrufe um, wenn das hilft.

Soap4R ist eine Qual, aber ich mag es aus einem Grund, nämlich den eigenständigen Soap-Server, den es bereitstellt. Es erleichtert das Testen externer Soap-Services so viel einfacher, indem Sie Ihren eigenen Soap-Server in einem Handumdrehen erstellen, der einfach die Antwort simuliert, sodass Sie keine Anfragen an externe Soap-Server für Integrations tests stellen müssen und zweitens wird der mit dem Soap-Client verbundene Code nicht getestet.

0 Stimmen

Ich mag die Verwendung des VCR-Gems, damit, sobald ich Spezifikationen habe, die Anrufe an den externen SOAP-Server abdecken, diese Ergebnisse in Kassetten zwischengespeichert werden. Dann kann ich meine Spezifikationen sogar ohne Netzwerkzugang ausführen, ohne dass ein lokaler SOAP-Server erforderlich ist. Durch die Verwendung von Handsoap, das für seine Anrufe auf Net HTTP konfiguriert ist, unterbricht VCR automatisch seine Anrufe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X