Support RPC::XML 0.69's incompatable object instantiation method.

master
Joey Hess 2009-09-29 13:35:30 -04:00
parent 1f929e7f64
commit ac8ecdcf68
3 changed files with 30 additions and 7 deletions

View File

@ -8,7 +8,6 @@ use warnings;
use strict; use strict;
use IkiWiki 3.00; use IkiWiki 3.00;
use RPC::XML; use RPC::XML;
use RPC::XML::Parser;
use IPC::Open2; use IPC::Open2;
use IO::Handle; use IO::Handle;
@ -55,7 +54,19 @@ sub rpc_call ($$;@) {
$plugin->{accum}.=$_; $plugin->{accum}.=$_;
while ($plugin->{accum} =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) { while ($plugin->{accum} =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
$plugin->{accum}=$2; $plugin->{accum}=$2;
my $r = RPC::XML::Parser->new->parse($1); my $parser;
eval q{
use RPC::XML::ParserFactory;
$parser = RPC::XML::ParserFactory->new;
};
if ($@) {
# old interface
eval q{
use RPC::XML::Parser;
$parser = RPC::XML::Parser->new;
};
}
my $r=$parser->parse($1);
error("XML RPC parser failure: $r") unless ref $r; error("XML RPC parser failure: $r") unless ref $r;
if ($r->isa('RPC::XML::response')) { if ($r->isa('RPC::XML::response')) {
my $value=$r->value; my $value=$r->value;
@ -72,9 +83,9 @@ sub rpc_call ($$;@) {
# XML-RPC v1 does not allow for # XML-RPC v1 does not allow for
# nil/null/None/undef values to be # nil/null/None/undef values to be
# transmitted, so until # transmitted. The <nil/> extension
# XML::RPC::Parser honours v2 # is the right fix, but for
# (<nil/>), external plugins send # back-compat, let external plugins send
# a hash with one key "null" pointing # a hash with one key "null" pointing
# to an empty string. # to an empty string.
if (exists $hash{null} && if (exists $hash{null} &&

1
debian/changelog vendored
View File

@ -6,6 +6,7 @@ ikiwiki (3.14159266) UNRELEASED; urgency=low
* img: Fix dependency code for full size images. * img: Fix dependency code for full size images.
* toggle, relativedate: Support templates that add attributes * toggle, relativedate: Support templates that add attributes
to the body tag. to the body tag.
* Support RPC::XML 0.69's incompatable object instantiation method.
-- Joey Hess <joeyh@debian.org> Sun, 27 Sep 2009 17:40:03 -0400 -- Joey Hess <joeyh@debian.org> Sun, 27 Sep 2009 17:40:03 -0400

View File

@ -8,7 +8,6 @@ use strict;
print STDERR "externaldemo plugin running as pid $$\n"; print STDERR "externaldemo plugin running as pid $$\n";
use RPC::XML; use RPC::XML;
use RPC::XML::Parser;
use IO::Handle; use IO::Handle;
# autoflush stdout # autoflush stdout
@ -31,7 +30,19 @@ sub rpc_read {
$accum=$2; # the rest $accum=$2; # the rest
# Now parse the XML RPC. # Now parse the XML RPC.
my $r = RPC::XML::Parser->new->parse($1); my $parser;
eval q{
use RPC::XML::ParserFactory;
$parser = RPC::XML::ParserFactory->new;
};
if ($@) {
# old interface
eval q{
use RPC::XML::Parser;
$parser = RPC::XML::Parser->new;
};
}
my $r=$parser->parse($1);
if (! ref $r) { if (! ref $r) {
die "error: XML RPC parse failure $r"; die "error: XML RPC parse failure $r";
} }