1XMLRPC(3) User Contributed Perl Documentation XMLRPC(3)
2
3
4
6 POE::Component::Server::XMLRPC - publish POE event handlers via XMLRPC
7 over HTTP
8
10 use POE;
11 use POE::Component::Server::XMLRPC;
12
13 POE::Component::Server::XMLRPC->new( alias => "xmlrpc", port => 32080 );
14
15 POE::Session->create
16 ( inline_states =>
17 { _start => \&setup_service,
18 _stop => \&shutdown_service,
19 sum_things => \&do_sum,
20 }
21 );
22
23 $poe_kernel->run;
24 exit 0;
25
26 sub setup_service {
27 my $kernel = $_[KERNEL];
28 $kernel->alias_set("service");
29 $kernel->post( xmlrpc => publish => service => "sum_things" );
30 }
31
32 sub shutdown_service {
33 $_[KERNEL]->post( xmlrpc => rescind => service => "sum_things" );
34 }
35
36 sub do_sum {
37 my $transaction = $_[ARG0];
38 my $params = $transaction->params();
39 my $sum = 0;
40 for(@{$params}) {
41 $sum += $_;
42 }
43 $transaction->return("Thanks. Sum is: $sum");
44 }
45
47 POE::Component::Server::XMLRPC is a bolt-on component that can publish
48 a event handlers via XMLRPC over HTTP.
49
50 There are four steps to enabling your programs to support XMLRPC
51 requests. First you must load the component. Then you must
52 instantiate it. Each POE::Component::Server::XMLRPC instance requires
53 an alias to accept messages with and a port to bind itself to.
54 Finally, your program should posts a "publish" events to the server for
55 each event handler it wishes to expose.
56
57 use POE::Component::Server::XMLRPC
58 POE::Component::Server::XMLRPC->new( alias => "xmlrpc", port => 32080 );
59 $kernel->post( xmlrpc => publish => session_alias => "methodName" );
60
61 Later you can make events private again.
62
63 $kernel->post( xmlrpc => rescind => session_alias => "methodName" );
64
65 Finally you must write the XMLRPC request handler. XMLRPC handlers
66 receive a single parameter, ARG0, which contains a XMLRPC transaction
67 object. The object has two methods: params(), which returns a
68 reference to the XMLRPC parameters; and return(), which returns its
69 parameters to the client as a XMLRPC response.
70
71 sum_things => sub {
72 my $transaction = $_[ARG0];
73 my $params = $transaction->params();
74 my $sum = 0;
75 while (@{$params})
76 $sum += $value;
77 }
78 $transaction->return("Thanks. Sum is: $sum");
79 }
80
81 And here is a sample XMLRPC::Lite client. It should work with the
82 server in the SYNOPSIS.
83
84 #!/usr/bin/perl
85
86 use warnings;
87 use strict;
88
89 use XMLRPC::Lite;
90
91 print XMLRPC::Lite
92 -> proxy('http://poe.dynodns.net:32080/?session=sum_server')
93 -> sum_things(8,6,7,5,3,0,9)
94 -> result
95 ;
96 pring "\n";
97
99 This project is a modified version of POE::Component::Server::SOAP by
100 Rocco Caputo. Of that, he writes:
101
102 This project was created over the course of two days, which attests to
103 the ease of writing new POE components. However, I did not learn XMLRPC
104 in depth, so I am probably not doing things the best they could.
105
106 Thanks to his code, I've managed to create this module in one day (on
107 only my second day of using POE). There's gotta be bugs here. Please
108 use http://rt.cpan.org/ to report them.
109
111 The examples directory that came with this component.
112
113 XMLRPC::Lite POE::Component::Server::SOAP POE::Component::Server::HTTP
114 POE
115
117 POE::Component::Server::XMLRPC is Copyright 2002 by Mark A.
118 Hershberger. All rights are reserved. POE::Component::Server::XMLRPC
119 is free software; you may redistribute it and/or modify it under the
120 same terms as Perl itself.
121
122
123
124perl v5.28.0 2003-03-20 XMLRPC(3)