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):xmlbyte-stream,[newcallurl]
Encode request into XML
response(@args):xmlbyte-stream
Encode response into XML
fault($faultcode,$faultstring):xmlbyte-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);
});