The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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>