---
name: "XML::RPC::Enc"
section: "3pm"
platform: "linux"
package: "libxml-rpc-fast-perl"
version: "0.8-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::RPC::Enc"
---

# XML::RPC::Enc(3pm)

Base class for XML::RPC encoders

## 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>"`
