Types XML-RPC

Types supportés

XRL supporte l’ensemble des types définis dans la spécification officielle de XML-RPC, c’est-à-dire :

  • int et i4 : entier signé sur 32 bits

  • boolean : le type booléen habituel

  • string : une simple chaîne de caractères

  • double : nombre flottant signé à double précision

  • dateTime.iso8601 : date/heure (sans milli-secondes ni fuseau horaire)

  • base64 : données binaires encodées en base64

  • struct : tableau associatif

  • array: tableau indexé

XRL accepte également les types suivants, dont l’usage est plutôt répandu, bien qu’ils ne fassent pas partie de la spécification officielle :

  • nil : valeur null (absence de valeur)

  • i8 : entier signé sur 64 bits

Pour finir, les types suivants appartenant à l’espace de noms défini par la Fondation Apache sont aussi supportés. Veuillez noter que dans ce cas particulier, les types doivent appartenir à l’espace de nom ayant pour URI http://ws.apache.org/xmlrpc/namespaces/extensions pour être correctement interprétés.

  • nil : valeur null (absence de valeur); identique au type sans espace de noms

  • i1 : entier signé sur 8 bits

  • i2 : entier signé sur 16 bits

  • i8 : entier signé sur 64 bits; identique au type sans espace de noms

  • biginteger : entier de taille arbitraire

  • dom : élément du DOM, transmis sous forme de fragment XML

  • dateTime: date/heure avec milli-secondes et fuseau horaire

Lorsque des types non-standards doivent être envoyés, XRL utilise systématiquement les types appartenant à des espaces de noms. Lisez le chapitre qui suit pour plus d’information.

Conversion des types

Par défaut, XRL convertit automatiquement les valeurs entre les types de PHP et ceux de XML-RPC lorsque c’est nécessaire.

Le tableau qui suit montre comment XRL convertit les types PHP vers les types XML-RPC.

Conversion de PHP vers XML-RPC

Type PHP

Type XML-RPC

null

nil dans un espace de noms

boolean boolean
integer

i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] sinon

double double
string

string s’il s’agit d’une séquence UTF-8 valide, base64 sinon

array

array pour les tableaux indexés, struct pour les tableaux associatifs

ressource GMP integer (PHP < 5.6.0)

i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] s’il tient sur 64 bits, biginteger dans un espace de noms [1] sinon

objet \fpoirotte\XRL\Types\AbstractType

Type XML-RPC représenté par l’objet

objet \GMP (PHP >= 5.6.0)

i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] s’il tient sur 64 bits, biginteger dans un espace de noms [1] sinon

objet \DateTime

dateTime.iso8601 (en utilisant le fuseau horaire local par défaut)

objet \DOMNode

dom dans un espace de noms [1]

objet \XMLWriter

dom dans un espace de noms [1]

objet \SimpleXMLElement

dom dans un espace de noms [1]

objet \Exception

faute XML-RPC (dérivée de struct)

Le tableau qui suit montre comment XRL convertit les types XML-RPC vers les types PHP.

Conversion XML-RPC vers PHP

Type XML-RPC

Type PHP

boolean boolean
i4 integer
int integer
double double
string string
base64 string
array

tableau indexé

struct

objet \Exception si la structure représente une faute [2], tableau associatif sinon

dateTime.iso8601

\DateTime (en utilisant le fuseau horaire local par défaut)

nil null

nil dans un espace de noms [1]

null

i1 dans un espace de noms [1]

integer

i2 dans un espace de noms [1]

integer
i8

ressource GMP integer (PHP < 5.6.0) ou objet \GMP (PHP >= 5.6.0)

i8 dans un espace de noms [1]

ressource GMP integer (PHP < 5.6.0) ou objet \GMP (PHP >= 5.6.0)

biginteger dans un espace de noms [1]

ressource GMP integer (PHP < 5.6.0) ou objet \GMP (PHP >= 5.6.0)

dom dans un espace de noms [1]

objet \SimpleXMLElement

datetime dans un espace de noms [1]

objet \DateTime

[1](1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

Avec l’espace de noms portant l’URI http://ws.apache.org/xmlrpc/namespaces/extensions pour la compatibilité avec les autres implémentations.

[2]

Un struct XML-RPC représentant une faute (c’est-à-dire une erreur) est converti en une exception qui est automatiquement levée.

Sous le capot

Les conversions de types sont gérées par les classes \fpoirotte\XRL\NativeEncoder (pour les conversions depuis PHP vers XML-RPC) et \fpoirotte\XRL\NativeDecoder (pour les conversions depuis XML-RPC vers PHP), en s’appuyant sur les classes de l’espace de noms \fpoirotte\XRL\Types\.

Vous pouvez surcharger ou désactiver les conversions en passant un autre encodeur/décodeur au constructeur du client ou du serveur XML-RPC.

Note

Si vous changez l’encodeur/décodeur par défaut, vous devrez gérer vous-même les conversions depuis/vers les instances de \fpoirotte\XRL\Types\AbstractType utilisées en interne par XRL.

Avertissement

Les fautes XML-RPC sont traitées à part et sont toujours transformées en objets \fpoirotte\XRL\Exception avant d’être automatiquement levées. Ce comportement est indépendant du décodeur passé au constructeur du client/serveur.