Ruby-Programmierung: xmlrpc
Erscheinungsbild
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>
|