Types de données : XPath/XQuery en Java

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Informations moteur > Fonctions XSLT et XPath/XQuery > Fonctions d'extension diverses > Fonctions d'extension Java >

Types de données : XPath/XQuery en Java

Lorsqu'une fonction Java est appelée depuis l'intérieur d'une expression XPath/XQuery, le type de données des arguments de la fonction est important pour déterminer laquelle des multiples classes Java possédant le même nom est appelé.

 

dans Java, les règles suivantes sont suivies :

 

S'il y a plus d'une seule méthode Java portant le même nom, mais chacune contenant un nombre différent d'arguments que les autres, alors c'est la méthode Java qui correspond le mieux au nombre d'arguments dans l'appel de la fonction qui est sélectionnée.
La chaîne XPath/XQuery, le nombre et les types de données booléens (voir la liste ci-dessous) sont convertis implicitement en un type de données Java correspondant. Si le type XPath/XQuery fourni peut être converti en plus d'un seul type Java (par exemple, xs:integer), alors, le type Java sélectionné est celui qui est déclaré pour la méthode sélectionnée. Par exemple, si la méthode Java appelée est fx(decimal) et que le type de données XPath/XQuery fourni est xs:integer, alors xs:integer sera converti dans le type de données decimal de Java.

 

La table ci-dessous recense les conversions implicites de la chaîne XPath/XQuery, le nombre et les types booléens en types de données Java.

 

xs:string

java.lang.String

xs:boolean

boolean (primitive), java.lang.Boolean

xs:integer

int, long, short, byte, float, double, et les classes de wrapper de ces catégories comme java.lang.Integer

xs:float

float (primitive), java.lang.Float, double (primitive)

xs:double

double (primitive), java.lang.Double

xs:decimal

float (primitive), java.lang.Float, double(primitive), java.lang.Double

 

Les sous-types des types de données du schéma XML recensés ci-dessus (et qui sont utilisés dans XPath et XQuery) seront aussi convertis dans le/s type/s Java correspondant à ce type d'ancêtre du sous-type.

 

Dans certains cas, il peut ne pas être possible de sélectionner la méthode Java correcte sur la base du cas suivant.

 

L'argument fourni est une valeur xs:untypedAtomic de 10 et il est prévu pour la méthode mymethod(float).
Néanmoins, il existe une autre méthode dans la classe qui prend un argument d'un autre type de données : mymethod(double).
Puisque les noms de la méthode sont les mêmes et que le type fourni (xs:untypedAtomic) peut être converti correctement soit à float ou double, il est possible que xs:untypedAtomic soit converti en double au lieu de float.
Par conséquence, la méthode sélectionnée ne sera pas la méthode requise et peut ne pas produire le résultat attendu. Pour contourner ce problème, vous pouvez créer une méthode définie par l'utilisateur avec un autre nom et utiliser cette méthode.

 

Les types qui ne sont pas couverts dans la liste ci-dessus (par exemple, xs:date) ne sera pas converti et générera une erreur. Néanmoins, veuillez noter que dans certains cas, il peut être possible de créer le type Java requis en utilisant un constructeur Java.

 


© 2019 Altova GmbH