]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/external.pm
(no commit message)
[git.ikiwiki.info.git] / IkiWiki / Plugin / external.pm
index 0d292dfc2520e0020e5eee164084d4ab93751a10..ec91c79db2149a1b58a63f34aedc4b83b7a76a4a 100644 (file)
@@ -8,7 +8,6 @@ use warnings;
 use strict;
 use IkiWiki 3.00;
 use RPC::XML;
 use strict;
 use IkiWiki 3.00;
 use RPC::XML;
-use RPC::XML::Parser;
 use IPC::Open2;
 use IO::Handle;
 
 use IPC::Open2;
 use IO::Handle;
 
@@ -55,7 +54,19 @@ sub rpc_call ($$;@) {
                $plugin->{accum}.=$_;
                while ($plugin->{accum} =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
                        $plugin->{accum}=$2;
                $plugin->{accum}.=$_;
                while ($plugin->{accum} =~ /^\s*(<\?xml\s.*?<\/(?:methodCall|methodResponse)>)\n(.*)/s) {
                        $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;
                        if ($r->isa('RPC::XML::response')) {
                                my $value=$r->value;
                        error("XML RPC parser failure: $r") unless ref $r;
                        if ($r->isa('RPC::XML::response')) {
                                my $value=$r->value;
@@ -72,9 +83,9 @@ sub rpc_call ($$;@) {
 
                                        # XML-RPC v1 does not allow for
                                        # nil/null/None/undef values to be
 
                                        # XML-RPC v1 does not allow for
                                        # nil/null/None/undef values to be
-                                       # transmitted, so until
-                                       # XML::RPC::Parser honours v2
-                                       # (<nil/>), external plugins send
+                                       # transmitted. The <nil/> extension
+                                       # is the right fix, but for
+                                       # back-compat, let external plugins send
                                        # a hash with one key "null" pointing
                                        # to an empty string.
                                        if (exists $hash{null} &&
                                        # a hash with one key "null" pointing
                                        # to an empty string.
                                        if (exists $hash{null} &&