XML::RPC::Enc(3) 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, "<[email protected]>"