| Catalyst-Model-XMLRPC documentation | Contained in the Catalyst-Model-XMLRPC distribution. |
Catalyst::Model::XMLRPC - XMLRPC model class for Catalyst
# Model
__PACKAGE__->config(
location => 'http://webservice.example.com:9000',
);
# Controller
sub default : Private {
my ($self, $c) = @_;
my $res;
eval {
$res = $c->model('RemoteService')->send_request('system.listMethods');
$c->stash->{value} = $res->value;
};
if ($@) {
# Something went wrong...
}
...
};
This model class uses RPC::XML::Client to invoke remote procedure calls using XML-RPC.
You can pass the same configuration fields as when you call RPC::XML::Client, the only special thing is that the URI is provided via the location field.
Take a look at RPC::XML::Client to see the method you can call.
Called from Catalyst.
By default, there is an error_handler and a fault_handler provided for the RPC::XML::Client object that call Carp::croak. You can override it if you want via the config call.
You'll get this error, if you haven't provided a location. See Config.
Something went wrong while trying to create an RPC::XML::Client object. See documentation of this module for further references.
Florian Merges, <fmerges@cpan.org>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Catalyst-Model-XMLRPC documentation | Contained in the Catalyst-Model-XMLRPC distribution. |
package Catalyst::Model::XMLRPC; use base qw/Catalyst::Model/; use strict; use warnings; use Carp; use NEXT; use RPC::XML; use RPC::XML::Client; our $VERSION = '0.04'; our $AUTOLOAD; sub new { my ($class, $c, $config) = @_; my $self = $class->NEXT::new($c, $config); $self->config($config); return $self; } sub _client { my $self = shift; my %config = %{ $self->config }; my $location = $config{location}; croak "Must provide an location" unless $location; delete $config{location}; unless (exists $config{error_handler}) { $config{error_handler} = sub { croak $_[0] }; } unless (exists $config{fault_handler}) { $config{fault_handler} = sub { croak $_[0] }; } my $client = RPC::XML::Client->new($location, %config); croak "Can't create RPC::XML::Client object" unless UNIVERSAL::isa($client, 'RPC::XML::Client'); return $client; } sub AUTOLOAD { my ($self, @args) = @_; return if $AUTOLOAD =~ /::DESTROY$/; (my $op = $AUTOLOAD) =~ s/^.*:://; my $client = $self->_client; my $msg = $client->$op(@args); return $msg; } 1; __END__