Revision history for Perl extension RPC::XML.

0.58	Thu May 12 03:24:23 PDT 2005

	Applied patches from Stephen Veiss to fix a small bug in the encoding
	method of RPC::XML::string. Trying to encode the literal string "0"
	would result in a null string. The patches provided the fix and a
	specific test-case for the related suite.

	Applied a patch from Mike Pomraning to allow user-level functions to
	return RPC::XML::fault objects directly without them being further
	wrapped by intermediate layers.

	Implemented a modified version of a patch from Lubomir Host that
	addresses an intermittent IOCTL problem when reading XPL files.

	Incremented package version number and put in warning of the impending
	move to XML::LibXML.

0.57	Fri Dec 24 03:02:48 PST 2004

	Some minor changes to how values are read from the configuration, to
	reduce "use of uninitialized value" warnings in regex operations.

	Based on a report from Brian Phillips, made adjustments in the
	smart_encode helper-routine to deal with blessed references. Anything
	that is derived from HASH or ARRAY is encoded as a struct or array,
	respectively. Anything derived from SCALAR is dereferenced and encoded
	as per usual. Carried this over to the class constructors, with special
	attention to the RPC::XML::simple_type class. Added tests to the suite
	for all of this, as well.

	The "system.status" method (both the general one and the one that is
	specific to Apache) now recognizes an optional boolean parameter that
	can keep the status call from counting against the "total_requests"
	struct value. This is to allow external monitors (status, health, etc.)
	to use that call without running up the value of that field needlessly.

0.56	Thu Dec  9 01:06:24 PST 2004

	Small change to the generated XML, to add an "encoding" setting to the
	XML preamble.

	Very minor changes, to make the test work with older Perls and/or Test

	Add "encoding" settings to all XML preambles, and make the scalar
	variable "$RPC::XML::ENCODING" an importable symbol, should users want
	to change the default encoding. Not currently documented, since this is
	technically a break from the XML-RPC spec.

	Traced a bug that was causing test failures in 50_client.t to a bug in
	version 5.800 of the LWP package. Now, Makefile.PL explicitly requires
	5.801 or higher, and the test suite skips the two tests that are broken
	by it, in cases where the system is still at 5.800 or older.

	Adding the encoding to the request and response blocks messed up some
	of the tests in the 10_data.t and 15_serialize.t suites. Fixed.

	Changed all URL references to the Artistic License from the (no longer
	valid) version to the (current, working) one.

0.55	Tue Nov 30 01:16:57 PST 2004

	Fix from Thomax G. to the loop-invariance near line 1403, for a bug
	that mostly appears with openACS-based clients.

	Clarify in the message emitted why the tests are skipped when
	Net::Server is not available.
	Fix based on input from several sources: The Content-Encoding header
	was not being set correctly for responses when compression was applied
	to the response message.

	Applied a fix from the Debian maintainer of this package for their
	distribution, David Parrish: auto-reloading of methods was not actually
	stuffing the new data into the calling object.

	Applied a patch from a user to fix a problem with reading PerlSetVar
	values withing a <Location> block (worked fine in <Perl> blocks),
	as well as a small addition to the examples in the docs.

0.54	Wed Apr 14 04:43:56 PDT 2004

	Extended the $CLEAN list in Makefile.PL to also delete all *.ppd
	files. Also bumped the package version number to 0.54.

	Applied a patch from Tim Peoples that does three things: the 301
	error code in RPC::XML::Procedure::call now includes signature info
	when a signature mismatch occurs. RPC::XML::smart_encode turns undef
	values into zero-length RPC::XML::string objects. Lastly, the
	RPC::XML::string::as_string method turns undef into null values as

	Small change to the XML character-escaping in RPC::XML::string's
	as_string method, so that a lookup-table is used. The same table
	is now used to escape keys in structs, as well. Added tests to cover
	this. This was suggested by Johnathan Kupferer.

	Made a small change for the sake of syntax pedantry to t/20_parse.t.

	Fix to the error-handling for a failed LWP::UserAgent->request call
	in RPC::XML::Client::send_request (thanks to Jasper Cramwinckel).
	Also got a small glitch covered in one of the calls to the inflate()
	method in Compress::Zlib. Thanks to John Tobing for that one.

	Dropped a regex-compare in favor of a string-compare for the special
	case of the XML tag being dateTime.iso8601. In some locales, the 'lc'
	caused problems. This is near RPC::XML::Parser line 288.

	Applied a patch to Apache::RPC::Server (supplied by Tim Peoples) to
	support "NoCompression" as a PerlSetVar directive, the function of
	which is to disable compression support upon demand.

	Fixed two minor typos in the Apache::RPC::Server docs, the names for
	two of the PerlSetVar directives.

	Added to the docs the fact that struct keys are now escaped. Also put
	some coverage in the docs on the two ways of initializing a struct

	Applied a patch from Chris Darroch to allow better handling of
	arguments in RPC::XML::Server::server_loop. While the HTTP::Daemon
	portion was fine with collapsing the arg list into a hash, the
	Net::Server portion actually has documented behavior when it sees the
	same argument more than once, and collapsing to a hash caused these
	extra arguments to be lost.
0.53	Tue Feb 25 01:12:11 PST 2003

	Eliminated a warning under 5.00503 from t/40_server.t.

	Changes to the opening of files for base64 data to accomodate Perl
	5.00503. The old way (passing an undef scalar as the first argument
	to open()) doesn't work in that version.

	Added a one-byte offset to the filehandle-length tests in the
	t/15_serialize.t suite to account for Win-ish systems.

	Forgot to tag an newly-opened filehandle with binmode() at one point
	in the base64 support within RPC::XML.

0.52	Mon Feb 10 01:37:05 PST 2003

	Really got the warning in this time. Really. Also
	got some potential errors that seem to be overlooked under auto-loading
	but appear when auto-loading is disabled.

	Fixed a potentially-confusing problem in the example code within the
	RPC::XML::Client man page, just under "SYNOPSIS".

	More work to the RPM specfile template. The Provides/Requires
	list should be a lot cleaner now, and it also builds packages under
	rpm 4.1, now.

	Fixed a lurking bug in the Apache::RPC::Server class that was not
	setting the headers properly on responses. Probably lived this long
	because no one else but me was using it, and my client is lax enough
	to ignore it.

0.51	Thu Jan 30 00:49:07 PST 2003

	Removed an extraneous print line in t/11_base64_fh that caused a
	warning on some systems.

	Fixed calls to skip() in the test suites so that they work with
	older versions of the Test module.

	Calls to the encode_base64 routine from MIME::Base64 now pass a zero-
	length second argument, to suppress newlines between Base64 lines
	when stringifying the RPC::XML::base64 objects. This is to accomodate
	a broken Java XML-RPC package.

	Force a default value for the compress_re attribute in RPC::XML::Server
	when none is otherwise present. All my tests have had Compress::Zlib
	available, but when it isn't the compress_re attribute was triggering
	warnings when used in a regex.

0.50	Mon Jan 27 03:24:45 PST 2003

	Changed the usage of =head3 directives in the manual page for
	RPC::XML::Procedure to a =over/=back block instead. The =head3
	directive requires a newer set of pod utilities, and would mean the
	package had trouble building on 5.005 installations.

	Extended the RPC::XML::base64 class to allow for and handle being
	given a filehandle object instead of straight data. The object is
	kept as an open filehandle, and the buffer position is always noted
	and reset when operated on, so that other parts of the process using
	the handle don't get surprised. Added tests in t/11_base64_fh.t to
	exercise this.

	Added a serialize() method to all the data classes in preparation for
	changing the client and server modules to stream XML over the line
	rather than print it using in-memory strings. Added test suite
	t/15_serialize.t to exercise this.

	Modified RPC::XML::Parser to accept arguments to new() that instruct
	it to spool Base64 data to a filehandle, using the new capabilities
	of the base64 class described previously. Added tests to t/20_parser.t
	and support for the parameters to the constructors of the client and
	base server classes. Documented all around.

	Re-engineered the test for the "bytes" pragma in RPC::XML, so that
	it now works with Perl 5.005.

	Fixed the credentials() method in RPC::XML::Client.

	All the internal use of object attributes in RPC::XML::Client now use
	accessors instead of the hash keys directly, to make it easier to
	sub-class the package. The same was done in RPC::XML::Server and to
	some degree in Apache::RPC::Server. The server classes are more likely
	to have problems, though.

	The parsing of incoming data in the client and both server classes is
	now done to a streaming XML parser, eliminating the need for the
	full message to ever be in memory at once. Likewise, the client and
	server classes have new attributes and accessor methods to allow
	them to spool outgoing messages to files if the messages threaten to
	be too large to keep in memory (this is best used when dealing with a
	lot of Base64 data that is being dealt with directly on disk as well).

0.46	Sun Dec 29 23:39:05 PST 2002

	Applied a patch from Andrew Langmead to fix a bug in the uri() method
	of RPC::XML::Client. Prior, retrieving the value could accidentally
	reset it. Applied another fix from him to prevent a possible warning.

	Applied another patch to better handle testing of the availability of
	compression in the client.

	Moving around some of the RPM spec-file generation caused problems
	with some people trying to build the package if was missing.
	Fixed this in Makefile.PL.

	Fix to RPC::XML::Procedure per tip from Stig Porsgaard, to fix the
	reading of 'signature' arguments to new() when providing all the
	proc data directly. Reported by others as well, but Stig nailed it
	down to a specific line.

0.45	Tue Oct 29 21:06:00 PST 2002

	Fixed a problem in the test-usage of the bytes pragma in RPC::XML,
	reported by Marc Jauvin.

	Closed a potential security hole in the parsing of external entities,
	pointed out by Gregory Steuck.

0.44	Fri Aug 30 23:44:08 PDT 2002

	Cleaned up the exports list in, which still had remnants
	from when this package was intended to extend XML-RPC. There were no
	routines to match the symbols, but the potential for error was there.

	Fixed a typo in the docs for RPC::XML::Client, and some documentation
	goofs in RPC::XML::Server (regarding the timeout method/option). A
	few doc fixes in RPC::XML::Procedure, for good measure.

	Implemented two fixes sent in by Marc Liyanage: a fix for setting the
	Content-Length headers on messages that takes the length in bytes
	rather than characters; the second is a fix around the compression
	support that makes certain an undef isn't evaluated against the

	The above added an exported function to RPC::XML, so that got
	documented. In the process, it occurred to me to document the helper
	functions like RPC_BOOLEAN, RPC_DOUBLE, etc.

0.43	Sun Aug 18 22:19:30 PDT 2002

	Changed methods/methodSignature.code, t/40_server.t and
	t/60_net_server.t so that the provided system.methodSignature follows
	the accepted API (returns a list of lists, rather than list of
	strings). Pointed out by Bjoern Stierand.

	Added a missing helper (RPC_I4) to

	Fixed a bad bug with the newly-added compression support in
	Apache::RPC::Server::handler. Because $self was defined earlier,
	strict failed to point out that my object in that scope was called
	$srv, rather than $self. And $self->compress didn't work, amazingly
	enough. Found and reported by Scott Fagg.

	Added a credentials() method to the RPC::XML::Client class to set
	Basic Authentication credentials on the underlying LWP::UserAgent
	object. Per suggestion and sample implementation from Stuart Clark.

	Fixed a docs-nit in RPC::XML::Server, and did some major clean-up in
	the docs for RPC::XML. In particular, added documentation for one
	of the data class methods that had been overlooked ("type").

0.42	Thu Aug  1 00:51:12 PDT 2002

	Changed the test in Apache::RPC::Server of the Content-type header so
	that it accepts a header that contains "text/xml", as opposed to only
	accepting a header that exactly equalled that string. Allows for
	things like SOAP::Lite's XMLRPC::Lite which include a charset in the

	time2iso8601() in the RPC::XML module now allows defaulting of the
	$time argument to time() (which means no timezone specification).

	Found a bug in RPC::XML::Parser where base64 data being parsed in a
	request/response message wasn't being properly passed to the c'tor
	for RPC::XML::base64. Reported by Chris Brierley.

	Added a line in Apache::RPC::Server to set the Content-Type header
	on HEAD responses. Apache won't take this from the usual header()
	method, it has to be explicitly set with content_type().

	Two of the tests in t/40_server.t could cause fatal errors since a
	return value wasn't tested for ref-ness before having a method called
	on it. Fixed.

	Compress::Zlib-based compression is now supported in RPC::XML::Server,
	RPC::XML::Client and Apache::RPC::Server. It should be compatible with
	the XMLRPC::Lite package's compression.

0.41	Wed May 22 02:50:47 PDT 2002

	Wrapped the call to XML::Parser::parse (lib/RPC/XML/ in an
	eval {} so that parse failures don't kill a server or client. Reported
	by Kevin Greene.

	An intended clone-operation in RPC::XML::response::new (lib/RPC/
	was never actually written, which allowed for a corner case that could
	result in new() return undef when it shouldn't. Related to the bug
	reported by Sergey Scherbinin.

	The RPC::XML::Procedure::call method (lib/RPC/XML/ had one
	error-check loop that was returning a full RPC::XML::response object,
	instead of just a RPC::XML::fault. Reported by Sergey Scherbinin.

0.40	Sat May  4 00:42:18 PDT 2002

	Fixed some grammar problems in error messages, and some formatting.

	Fixed a bug in the new() method of Apache::RPC::Server where it was
	expecting the value of the "apache" key to be an object of the
	Apache::Server class, but it was actually getting an object of the
	Apache class.

	Created RPC::XML::Function class, which is a type of server-side
	encapsulator that doesn't bother with signature tests of any kind.
	The DTD and make_method tool support the new type.

	Changed the encoding of the Perl code in etc/make_method as follows:
	If the code does not already contain either of the two sequences,
	']]>' or '__DATA__', then the code is wrapped in a <![CDATA[ ]]>
	section, with #!/usr/bin/perl (actually, $Config{startperl}) at the
	head and __DATA__ at the end. Besides leaving the Perl code readable,
	the *.xpl files can now be syntax-checked with "perl -cx". Thanks to
	the mod_perl guys for this idea, cribbed from their manual page.

	Abstracted some of the invocation code out of the server class and
	into the RPC::XML::Procedure class, where it really belonged. This
	aided in further eliminating redundancy in the server class in the
	same general area. I may yet want to tune this area, but I'm a good
	deal happier with the reduction in complexity and repetition.

0.37	Fri Mar 22 22:16:08 PST 2002

	Applied a patch to RPC::XML::Server from Tino Wuensche
	(<>) that fixed some of the signal-handling
	and exit-case-handling in server_loop().

	Fixed a bug in RPC::XML::Procedure found by a user (a former
	co-worker from my Denver days, coincidentally enough) that would
	trigger when auto_methods was set to 1 on a server object, but the
	request had no matching file anywhere in the search path.

0.36	Tue Jan 29 12:11:30 PST 2002

	The file in the t directory was accidentally omitted from the
	0.35 release. This release is meant only to correct that oversight.

0.35	Sun Jan 27 16:29:19 PST 2002

	Fixed a small bug in make_method that would have caused a failure if
	anyone used the command-line switches to specify data, rather than a
	base-file (specifically, the handling of the --code argument). Also
	clarified a few places in the man page.

	Found bugs in both versions of the system.status server method (both
	the basic and the Apache flavor). Both were neglecting to set the
	"methods_known" value. Also found a bug in system.methodHelp. Amazing
	what writing the regression tests can uncover.

	RPC::XML::Method is now a skeleton file, slated to be removed by or
	before 1.0. It has been renamed to RPC::XML::Procedure, and the
	RPC::XML::Method class is declared as an empty subclass of the
	RPC::XML::Procedure class. Procedures differ from methods in that they
	do not get the server object instance as a first parameter in the list
	that gets passed in.

	Support for RPC::XML::Procedure (and general procedure vs. method)
	added to the DTD and the make_method tool. All the routines in the
	ex/ directory are declared as procedures, to further illustrate the

	When code blocks for XPL files are eval'd, they are given a "package"
	statement to force subsequent calls to be in the RPC::XML::Pprocedure
	namespace, rather than defaulting to main (a potentially dangerous
	assumption). The docs on routine-calling in RPC::XML::Server have been
	updated to discuss this.

	Many more tests added to the suite for RPC::XML::Server.

	Created the test suite for RPC::XML::Client.

	RPC::XML::Client no longer returns a full RPC::XML::response object
	from any of its routines. Rather, simple_request still does what it
	always has, and send_request now returns a data-type value. All the
	data-type classes have a method called "is_fault" that returns false
	for all except (of course) RPC::XML::fault. This lets callers of
	send_request test the return value to see if it is a fault.

	Added callback support for errors and faults to the RPC::XML::Client
	class. This allows programmers to tie specific actions to cases where
	a call returns a RPC::XML::fault object, or an outright error.

	Created a separate test suite for RPC::XML::Server when used in
	conjunction with the Net::Server package (it skips if the latter is
	not installed on the system).

	Almost all of the method-manipulation routines in RPC::XML::Server (all
	but add_default_methods()) now have counterparts called by the same
	name after s/method/proc/. This is purely for syntactical sugar and
	symmetry. Except in the case of add_proc(), where it actually ensures
	that a hash-reference calling convention is geared correctly to add a
	RPC::XML::Procedure object rather than RPC::XML::Method.

0.30	Thu Jan  3 01:57:29 PST 2002
	- first beta release

	Apache::RPC::Server::list_servers no longer sorts the list before
	returning it. No reason to assume it matters, or to levy that tax
	against those who don't care.

	RPC::XML::Server::url now constructs saner strings for HTTPS and for
	HTTP on port 80.

	The new() method in RPC::XML::Server wasn't quite handling the "host"
	and "port" arguments that Apache::RPC::Server sent it correctly.

	Added a patch to the RPC::XML::Server class from Christopher Blizzard
	( to allow control over the timeout interval that
	HTTP::Daemon uses in answering new connections.

	Replaced a GNU Make-centric dependancy rule for the XPL files with
	a more portable .SUFFIXES-based one. This is unfortunate, as the %
	syntax of GNU make is much cleaner. But GNU Make isn't universal. Yet.

	This release marks the debut of Apache::RPC::Status, a monitor similar
	in nature and design to Apache::Status, for running RPC servers under
	Apache/mod_perl. See the manual page for details.

	Documentation for Apache::RPC::Server was updated based on trials and
	travails in trying to actually set up a configuration inside <Perl>
	blocks. This isn't very clear in the mod_perl documentation, but at
	least the docs for this module reflect exactly what I have configured
	on my development box, so I know it works.

0.29	Sun Dec  2 22:41:39 PST 2001

	Added share_methods(), copy_methods() and delete_method() calls to the
	RPC::XML::Server class (and thus to the Apache class as well). Had
	already added an INSTALL_DIR method to retrieve the class-specific
	installation dir to the Apache class, so mirrored it here, as well.

	Added list_servers() static method to Apache::RPC::Server, to allow
	for abstract retrieval of the ID-tags of the current known servers.
	This is mainly so Apache::RPC::Status can use it in conjunction with
	get_server() to examine the server objects for the sake of stats and

	Added list_methods() to RPC::XML::Server, to list the object's known
	(published) methods by name. Mainly for use in the regression suites,
	but worth documenting in the API in case someone else finds it

	Four of the provided methods in the introspection API
	(system.introspection, system.listMethods, system.methodHelp and
	system.methodSignature) needed to be updated to use the newer API for
	the XML::RPC::Method class when retrieving information from the server.

	Started the test suites for RPC::XML::Method and RPC::XML::Server.
	The tests that are delivered as part of this build are not fully
	complete, but should be a reasonable start.

0.28	Sun Oct  7 21:27:39 PDT 2001

	Found a subtle-but-nasty bug in the handling of RPC::XML::string
	objects. Thanks to Dominic Mitchell <> for pointing
	me in the right direction.

	Started down the path of making the suite as a whole geared more
	towards real use than illustrative example. The XML data-classes now
	no longer use indention (or any superfluous whitespace) in their
	stringification. This shortened the code quite a bit, and will also
	mean shorter messages. This could not have been done cleanly without
	the tests in t/10_data.t.

	Extracted the method-manipulation code into a new class, called
	RPC::XML::Method. This should make method-sharing easier, and pull
	a lot of method-specific code out of RPC::XML::Server and

	Clarified some issues in the new() constructor of the
	Apache::RPC::Server class, and also changed the calling convention.
	It no longer treats the first few arguments in any special way at all.
	The arguments are all consistently taken as option/value pairs, just
	as with RPC::XML::Server. The documentation reflects this. This may
	break things built on the old style, but in the long run it should
	prove much better.

0.27	Sun Jul  8 16:25:51 PDT 2001

	Removed a -w warning from RPC/ Fixed some cases in the new()
	method of RPC::XML::boolean that would have permitted invalid data.
	Added two convenience methods to RPC::XML::fault, called code() and
	string(), that fetch the faultCode and faultString member values as
	native Perl values. The RPC::XML::base64 class was using the wrong
	container tags in the as_string method.

	Clarified and expanded some of the documentation in RPC/XML/

	Adjusted the PREREQ_PM hash in Makefile.PL so that it correctly looks
	for LWP, and also looks for File::Spec 0.8 or newer (needed to ensure
	that the splitpath() method is available).

	Cleaned up the load-tests (t/00_load.t) to use the Test harnessing
	package. Added test suites for the RPC::XML data classes (t/10_data.t,
	96 tests) and the RPC::XML::Parser container-class (t/20_parser.t,
	7 tests).

0.26	Mon Jun 25 22:30:18 PDT 2001

	Fixed some doc errors in RPC::XML::Server. Mainly things I had
	simplified, but not updated the docs to reflect.

	Added a fair amount to the docs in Apache::RPC::Server. In particular,
	a new section was added that illustrates using <Perl> configuration
	sections to create the server objects in the master Apache process,
	so that they are automatically inherited by children.

0.25	Tue Jun 12 22:35:09 PDT 2001

	This is the initial release.