The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
Changes 03
META.yml 11
XMLRPC.pm 519
3 files changed (This is a version diff) 623
@@ -1,5 +1,8 @@
 Revision history for Perl extension Catalyst::Plugin::XMLRPC
 
+0.05  Sun Nov 20 00:00:00 2005
+        - Fixed bugs
+
 0.04  Fri Nov 11 00:00:00 2005
         - updated for Catalyst 5.5
 
@@ -1,7 +1,7 @@
 # http://module-build.sourceforge.net/META-spec.html
 #XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
 name:         Catalyst-Plugin-XMLRPC
-version:      0.04
+version:      0.05
 version_from: XMLRPC.pm
 installdirs:  site
 requires:
@@ -5,8 +5,10 @@ use base 'Class::Data::Inheritable';
 use attributes ();
 use RPC::XML;
 use RPC::XML::Parser;
+use Catalyst::Action;
+use Catalyst::Utils;
 
-our $VERSION = '0.04';
+our $VERSION = '0.05';
 
 __PACKAGE__->mk_classdata('_xmlrpc_parser');
 __PACKAGE__->_xmlrpc_parser( RPC::XML::Parser->new );
@@ -93,8 +95,18 @@ sub xmlrpc {
                 my @args = @{ $c->req->args };
                 $c->req->args( $req->{args} );
                 my $name = ref $class || $class;
-                $c->actions->{reverse}->{$code} ||= "$name->$method";
-                $c->state( $c->execute( $class, $code ) );
+                my $action = Catalyst::Action->new(
+                    {
+                        name      => $method,
+                        code      => $code,
+                        reverse   => "-> $name->$method",
+                        class     => $name,
+                        namespace => Catalyst::Utils::class2prefix(
+                            $name, $c->config->{case_sensitive}
+                        ),
+                    }
+                );
+                $c->state( $c->execute( $class, $action ) );
                 $res = $c->state;
                 $c->req->args( \@args );
             }
@@ -121,8 +133,10 @@ sub xmlrpc {
 sub _deserialize_xmlrpc {
     my $c = shift;
 
-    my $p = $c->_xmlrpc_parser->parse;
-    $p->parse_more( $c->req->body );
+    my $p       = $c->_xmlrpc_parser->parse;
+    my $body    = $c->req->body;
+    my $content = do { local $/; <$body> };
+    $p->parse_more($content);
     my $req = $p->parse_done;
 
     # Handle . in method name