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 <joerg@joergmeltzer.de>.

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
<joerg@joergmeltzer.de>.

lib/RPC/XML/Server.pm:
Applied a modified form of a patch submitted by Mike Rylander
<miker@n2bb.com> 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 " (&apos; and &quot;) 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.
