RPC::XML - An implementation of XML-RPC Version: 0.75 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-2.1.php CHANGES * MANIFEST Somehow, t/13_no_deep_recursion.t never got added to MANIFEST. * lib/RPC/XML/Parser/XMLLibXML.pm RT #65154: Fixed a cut/paste error in an error message. * lib/RPC/XML/Client.pm * t/51_client_with_host_header.t (added) RT #68792: Merge pull request #2 from dragon3/master (https://github.com/dragon3). Allow setting of "Host" header, and test suite for it. * MANIFEST * t/51_client_with_host_header.t Added new test suite to MANIFEST, fixed spelling. Also added "plan tests" line to the test suite. * lib/RPC/XML/Parser/XMLLibXML.pm * t/20_xml_parser.t * t/21_xml_libxml.t * t/41_server_hang.t Merge pull request #3 from yannk/master (https://github.com/yannk). Expat parser subclass is protected against ext ent attack, libxml isn't. * t/41_server_hang.t Undo a change to this suite from yannk's pull. * etc/make_method * lib/Apache/RPC/Server.pm * lib/Apache/RPC/Status.pm * lib/RPC/XML.pm * lib/RPC/XML/Client.pm * lib/RPC/XML/Function.pm * lib/RPC/XML/Method.pm * lib/RPC/XML/Parser.pm * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm * lib/RPC/XML/ParserFactory.pm * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm More perlcritic-driven clean-up. This is mostly POD sections, but also includes heavy re-working of etc/make_method and parts of lib/RPC/XML.pm. * lib/RPC/XML/Parser/XMLLibXML.pm * t/21_xml_libxml.t Fixed external entity handling on MacOS. Also made small change to the test suite to be cleaner. * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm Took out warnings on external entities blocking. Now it blocks silently. Also cleaned up some docs. * t/15_serialize.t Additions to increase code coverage in XML.pm. * lib/RPC/XML.pm Turns out this wasn't exporting RPC_I8. * lib/Apache/RPC/Server.pm * lib/Apache/RPC/Status.pm * lib/RPC/XML.pm * lib/RPC/XML/Client.pm * lib/RPC/XML/Function.pm * lib/RPC/XML/Method.pm * lib/RPC/XML/Parser.pm * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm * lib/RPC/XML/ParserFactory.pm * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm * xt/02_pod_coverage.t Made 5.8.8 the new minimum-required perl. Also dropped the utf8_downgrade hack, which affected an xt test. * lib/RPC/XML/Client.pm Improved arguments-checking in send_request. * lib/RPC/XML/Client.pm * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm * lib/RPC/XML/Server.pm Fixed error-cases in usage of File::Temp->new(). File::Temp::new croaks on errors, doesn't return undef like I thought. * MANIFEST * lib/RPC/XML/Function.pm (deleted) * lib/RPC/XML/Method.pm (deleted) * lib/RPC/XML/Procedure.pm Roll Method.pm and Function.pm into Procedure.pm. Remove Method.pm and Function.pm from distro. * lib/RPC/XML/Parser/XMLLibXML.pm Fixed regexp for methodName validation. * t/10_data.t * t/11_base64_fh.t * t/12_nil.t * t/15_serialize.t * t/20_xml_parser.t * t/21_xml_libxml.t * t/25_parser_negative.t (added) * t/29_parserfactory.t * t/30_method.t * t/40_server.t * t/40_server_xmllibxml.t * t/50_client.t * t/BadParserClass.pm (added) * t/meth_good_1.xpl * t/namespace3.xpl * t/svsm_text.b64 (added) * t/util.pl First round of Devel::Cover-inspired improvements. These are the changes to the test suites to increase coverage of the code. * lib/RPC/XML.pm * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm Fixes and such from Devel::Cover analysis. * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm * t/30_method.t * t/meth_good_1.xpl * t/meth_good_2.xpl (added) * t/meth_good_3.xpl (added) Fixes for file-based method loading/reloading. New tests in the suite, and re-working of the ugliest hacky part of this package. * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm * t/30_method.t * t/meth_good_3.xpl RPC::XML::Procedure test-coverage improvement. Also removed some unneeded code. * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm * t/30_method.t * t/40_server.t Last round of RPC::XML::Procedure test coverage. This is mostly in t/40_server.t, though some bugs were found and addressed in the modules and in t/30_method.t. * lib/Apache/RPC/Server.pm * lib/Apache/RPC/Status.pm * lib/RPC/XML.pm * lib/RPC/XML/Client.pm * lib/RPC/XML/Parser.pm * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm * lib/RPC/XML/ParserFactory.pm * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm Documentation clean-up and update. * lib/Apache/RPC/Server.pm * lib/Apache/RPC/Status.pm * lib/RPC/XML/Client.pm * lib/RPC/XML/Parser/XMLLibXML.pm * lib/RPC/XML/Parser/XMLParser.pm * lib/RPC/XML/Procedure.pm * lib/RPC/XML/Server.pm Changes from new Perl::Critic::Bangs policies. * xt/01_pod.t * xt/02_pod_coverage.t * xt/03_meta.t * xt/04_minimumversion.t * xt/05_critic.t Adjustments to reflect moving from t to xt. Also made changes to xt/02_pod_coverage.t to reflect changes to modules. * lib/RPC/XML/Client.pm Removed some error checks that can never fail. * lib/RPC/XML/Server.pm * t/40_server.t Code-coverage-driven changes and added tests. * etc/make_method Fixes from new Perl::Critic::Bangs policies. * lib/RPC/XML/Server.pm Removed usage of AutoLoader completely. * lib/RPC/XML/Server.pm * t/40_server.t * xt/02_pod_coverage.t Removed some dead code and better did the aliases. This required a change in t/40_server.t for a private sub that no longer exists. Also updated xt/02_pod_coverage.t for private subs that have no pod. * lib/Apache/RPC/Server.pm RT #67694: Fix a potential infinite-loop condition.