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 \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 \fpoirotte\XRL\Types\AbstractType Type XML-RPC représenté par l’objet
objet \DateTime

dateTime.iso8601 .. note:

The XML-RPC ``dateTime.iso8601`` data type does not support
milliseconds, nor passing timezone information.
Only use this type when the actual timezone is known beforehand
(using contextual information or a pre-established convention),
or when potential errors in date/time handling are not an issue.
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

integer on 64-bit PHP, a GMP integer resource (on PHP < 5.6.0) or a \GMP object (on PHP >= 5.6.0) .. note:

An exception will be thrown in this case if PHP's native
``integer`` type cannot be used and the GMP extension
is not available.
i8 dans un espace de noms [1]

integer on 64-bit PHP, either a GMP integer resource (on PHP < 5.6.0) or a \GMP object (on PHP >= 5.6.0) .. note:

An exception will be thrown in this case if PHP's native
``integer`` type cannot be used and the GMP extension
is not available.

otherwise (the GMP extension is required in this case)

biginteger dans un espace de noms [1]

GMP integer resource (PHP < 5.6.0) or \GMP object (PHP >= 5.6.0) .. note:

An exception will be thrown in this case if the GMP extension
is not available.
dom dans un espace de noms [1] objet \SimpleXMLElement
datetime dans un espace de noms [1] \DateTime object (using local timezone information by default, but can be configured to use another timezone as well)
[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.