NAME
XML::RPC::Enc - Base class for XML::RPC encoders
SYNOPSIS
Generic usage
use
XML::RPC::Fast;
my
$server
= XML::RPC::Fast->new(
undef
,
encoder
=> XML::RPC::Enc::LibXML->new );
my
$client
= XML::RPC::Fast->new(
$uri
,
encoder
=> XML::RPC::Enc::LibXML->new );
METHODS
The following methods should be implemented
new (%args)
Should support arguments:
- internal_encoding [ = undef ]
-
Internal encoding.
undef
means wide perl characters (perl-5.8.1+) - external_encoding [ = utf-8 ]
-
External encoding. Which encoding to use in composed XML
request ($method, @args) : xml byte-stream, [ new call url ]
Encode request into XML
response (@args) : xml byte-stream
Encode response into XML
fault ($faultcode, $faultstring) : xml byte-stream
Encode fault into XML
registerClass ($class_name,$encoder_cb)
Register encoders for custom Perl types
Encoders description:
# Generic:
$simple_encoder_cb
=
sub
{
my
$object
=
shift
;
# ...
return
type
=>
$string
;
};
# Encoder-dependent (XML::RPC::Enc::LibXML)
$complex_encoder_cb
=
sub
{
my
$object
=
shift
;
# ...
return
XML::LibXML::Node;
};
Samples:
$enc
->registerClass(
DateTime
=>
sub
{
return
(
'dateTime.iso8601'
=>
$_
[0]->strftime(
'%Y%m%dT%H%M%S.%3N%z'
) );
});
# Encoder-dependent (XML::RPC::Enc::LibXML)
$enc
->registerClass(
DateTime
=>
sub
{
my
$node
= XML::LibXML::Element->new(
'dateTime.iso8601'
);
$node
->appendText(
$_
[0]->strftime(
'%Y%m%dT%H%M%S.%3N%z'
));
return
$node
;
});
decode ($xml) : $methodname, @args
Decode request xml
decode ($xml) : @args
Decode response xml
decode ($xml) : { fault => { faultCode => ..., faultString => ... } }
Decode fault xml
registerType ($xmlrpc_type,$decoder_cb)
Register decoders for XML-RPC types
$decoder_cb is depends on encoder implementation.
Samples for XML::RPC::Enc::LibXML
$enc
->registerType(
base64
=>
sub
{
my
$node
=
shift
;
return
MIME::Base64::decode(
$node
->textContent);
});
$enc
->registerType(
'dateTime.iso8601'
=>
sub
{
my
$node
=
shift
;
return
DateTime::Format::ISO8601->parse_datetime(
$node
->textContent);
});
COPYRIGHT & LICENSE
Copyright (c) 2008-2009 Mons Anderson.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Mons Anderson, <mons@cpan.org>