RPC::XML - An implementation of XML-RPC Version: 0.60 WHAT IS IT The RPC::XML package is an implementation of XML-RPC. The module provides classes for sample client and server implementations, a server designed as an Apache location-handler, and a suite of data-manipulation classes that are used by them. USING RPC::XML There are not any pre-packaged executables in this distribution (except for a utility tool). Client usage will usually be along the lines of: use RPC::XML::Client; ... my $client = new RPC::XML::Client 'http://www.oreillynet.com/meerkat/xml-rpc/server.php'; my $req = RPC::XML::request->new('meerkat.getChannelsBySubstring', 'perl'); my $res = $client->send_request($req); # This returns an object of the RPC::XML::response class. This double-call # of value() first gets a RPC::XML::* data object from the response, then # the actual data from it: my $value = $res->value->value; Running a simple server is not much more involved: use RPC::XML::Server; ... my $srv = new RPC::XML::Server (host => 'localhost', port => 9000); # You would then use $srv->add_method to add some remotely-callable code ... $srv->accept_loop; # Stays in an accept/connect loop BUILDING/INSTALLING This package is set up to configure and build like a typical Perl extension. To build: perl Makefile.PL make && make test If RPC::XML passes all tests, then: make install You may need super-user access to install. PROBLEMS/BUG REPORTS Please send any reports of problems or bugs to rjray@blackperl.com SEE ALSO XML-RPC: http://www.xmlrpc.com/spec The Artistic 2.0: http://www.opensource.org/licenses/artistic-license-2.0.php The LGPL 2.1: http://www.opensource.org/licenses/lgpl-license.php CHANGES t/00_load.t: t/01_pod.t: t/02_pod_coverage.t: t/10_data.t: t/11_base64_fh.t: t/15_serialize.t: t/20_parser.t: t/30_method.t: t/40_server.t: t/50_client.t: t/60_net_server.t: Related to the main change of RT ticket #30849, fixes potential problem in the creation of temporary file names if a test script is run directly from the "t" directory. While at it, added a line with the Subversion "Id" keyword and set the "svn:keywords" property on all test scripts. The code-fix is based on suggestions from Jörg Meltzer . lib/RPC/XML/Client.pm: Per RT ticket #30849, fix problem caused by having colons in temp-file names. Fix largely from patch suggested by Jörg Meltzer . lib/RPC/XML/Server.pm: Applied a modified form of a patch submitted by Mike Rylander to make things work under SSL. lib/RPC/XML/Server.pm: t/41_server_hang.t: Fixed the bug in RPC::XML::Server::process_request() could lead to an infinite loop if the client shuts down the socket before the full request is sent. Added a test script specific to this bug, to catch it if it reappears. lib/RPC/XML.pm: t/10_data.t: Per RT ticket #30042, made a do-nothing branch in RPC::XML::smart_encode actually die with an error when a reference-type is passed in that cannot be converted. Added two tests to cover this, and took the opportunity to convert 10_data.t to Test::More. t/40_server.t: t/50_client.t: Applied a patch from Chris Darroch to make the spawning of servers work in some corner-cases that were failing. All that was required was explicit specification of 'localhost' in the instantiation. lib/RPC/XML/Parser.pm: t/20_parser.t: Applied a patch from Masatake Daimon (大門正岳) to improve the performance of the parser by reducing the (vast) number of string-concat operations. During this change, re-wrote the parser tests to use Test::More and have better diagnostics. lib/RPC/XML/Server.pm: t/40_server.t: Per RT ticket #29351, fixed a bug that caused a server to incorrectly report the location and cause of an XML parsing error in the request. The actual bug and solution were different than initially reported in the ticket. lib/RPC/XML.pm: t/10_data.t: Per RT ticket #31818, fix to the XML serialization of double values to conform to the XML-RPC spec, as it does not allow for exponential notation. This also required changes to the tests, as values were no longer being auto-truncated at 5 decimal places. Also finished cleaning up the t/10_data.t test suite with diagnostic messages on the tests that had not previously gotten them. lib/RPC/XML.pm: t/20_parser.t: In response to concerns raised by a report of parsing problems, added XML entity encoding for ' and " (' and ") to the base RPC::XML module, and added a test to the parser suite to make sure it is correctly turning all core XML entities back into characters during the parsing process. lib/Apache/RPC/Server.pm: lib/RPC/XML/Server.pm: t/40_server.t: RT ticket #34557: Provide access to client-side connection info to methods called on the server, by placing the data from get_peeraddr() (as abstracted through existing methods in HTTP::Daemon::ClientConn and Apache::Connection) into localized keys on the server object, as is already done with the method_name and signature pseudo-keys. Tests added to 40_server.t and docs updated. etc/make_method: lib/Apache/RPC/Server.pm: lib/Apache/RPC/Status.pm: lib/RPC/XML/Client.pm: lib/RPC/XML/Function.pm: lib/RPC/XML/Method.pm: lib/RPC/XML/Parser.pm: lib/RPC/XML/Procedure.pm: lib/RPC/XML/Server.pm: lib/RPC/XML.pm: Updated all copyright/redistribution information with current year and correct/current URLs for Artistic and LGPL licenses.