Ruby-Programmierung: xmlrpc
Aus Wikibooks
Zurück zu Ruby-Programmierung Hauptmenü 
| Schritt | Erklärung | Code |
|---|---|---|
| 1 | XMLRPC Server |
require "xmlrpc/server" s = XMLRPC::Server.new(8080) s.add_handler("funktion.add") do |a,b| a + b end s.add_handler("funktion.div") do |a,b| if b == 0 raise XMLRPC::FaultException.new(1, "Division durch 0") else a / b end end s.add_handler("funktion.str") do |a,b| a << b end s.add_handler("down") do s.shutdown "shutdown" end |
| Nach starten des XMLRPC Server meldet Ruby |
[2009-11-02 14:19:30] INFO WEBrick 1.3.1 [2009-11-02 14:19:30] INFO ruby 1.8.6 (2007-03-13) [i386-mswin32] [2009-11-02 14:19:30] INFO WEBrick::HTTPServer#start: pid=3708 port=8080 |
|
| 2 | XMLRPC Client |
require "xmlrpc/client" server = XMLRPC::Client.new("localhost", nil, 8080) begin param = server.call("funktion.add", 45, 55) puts "45 + 55 = #{param}" param = server.call("funktion.str", "Hello","Rubyuser") puts "#{param}" param = server.call("down") puts "#{param}" rescue XMLRPC::FaultException => e puts "Error:" puts e.faultCode puts e.faultString end |
| Client übersetzt nach XML |
<?xml version="1.0" ?> <methodCall> <methodName>funktion.add</methodName> <params> <param> <value> <i4>4</i4> </value> </param> <param> <value> <i4>5</i4> </value> </param> </params> </methodCall> <?xml version="1.0" ?> <methodCall> <methodName>funktion.str</methodName> <params> <param> <value> <string>Hello</string> </value> </param> <param> <value> <string>Rubyuser</string> </value> </param> </params> </methodCall> <?xml version="1.0" ?> <methodCall> <methodName>down</methodName> <params/> </methodCall> |
|
| Man erkennt die Übersetzung von
param = server.call("funktion.add", 45, 55) |
<?xml version="1.0" ?> <methodCall> <methodName>funktion.add</methodName> <params> <param> <value> <i4>4</i4> </value> </param> <param> <value> <i4>5</i4> </value> </param> </params> </methodCall> |
|
| Im Tag value wird auch die Beschreibung
von welcher Datentyp der Wert ist |
Einfache Datentypen – "int" bzw. "i4" Wertebereich 32-bit von - 2,147,483,648 bis 2,147,483,647 – "boolean" Wert O und 1 zugelassen machmal auch false|true – "string" beachten bei XML valid & & ' ' < < > > " " ASCII oder Unicodeumfang hängt vom Server ab. – "double" Realzahlen 64-bit Kein Inf, -Inf, NaN, keine Exponenten. Der tatsächliche Wertebereich hängt vom Server ab – "dateTime.iso8601" Formatvorgabe YYYYMMDDThh:mm:ss – "base64" String wird base64-Codierung umgewandelt Beschreibung in RFC 2045 |
|
| Der Server berechnet die Antwort und sendet das Ergebnis als
XML Daten an den Client zurück |
<?xml version="1.0" ?> <methodResponse> <params> <param> <value> <i4>9</i4> </value> </param> </params> </methodResponse> <?xml version="1.0" ?> <methodResponse> <params> <param> <value> <string>HelloRubyuser</string> </value> </param> </params> </methodResponse> <?xml version="1.0" ?> <methodResponse> <params> <param> <value> <string>shutdown</string> </value> </param> </params> </methodResponse> |