Perl now has three implementions of XML::RPC, Frontier::RPC2, SOAP::Lite and RPC::XML. Each is interesting and somewhat broken in its own way.
Frontier::RPC2 0.06 has issues with Boolean, iso8601 and Base64 because these classes have a bug in their constructors.
Given:
sub new {
my $type = shift;
my $value = shift;
return bless \$value, $type;
}
Instead of checking to see if $type is a reference, this
code blesses. If a reference is passed in, the blessed class
is sometime like "Frontier::RPC2::Base64=SCALAR(0x65432)".
This breaks code later than encodes/decodes these values into XML. Perltoot has the solution to this problem
RPC::XML is an interesting module in that it brings type
checking to Perl, in a sense. When creating an XML-RPC server, each remote procedure has to the arguments it accepts along with its return type. This is call a signature. Although type checking is unPerlish, it is very
helpful when dealing with other languages that are subPerl.
More docs on signatures would be great.
Finally, SOAP::Lite brings its own bad self to the XML-RPC party. Although in my testing it works with all the
XML-RPC datatypes, the programming interface is similar to
SOAP::Lite (not surprisingly). It is a style which takes a
bit of getting usef to.
The good news is that, at least from a client level, all these modules seemed to be compatible. That is, a Frontier::Client can talk to an XMLRPC::Lite server.
More to come.