Altova StyleVision 2025 Professional Edition

Cuando se llama a una función Java desde dentro de una expresión XPath/XQuery, el tipo de datos de los argumentos de la función es importante a la hora de determinar a cuál de las clases Java que tienen el mismo nombre se llama.

 

En Java se siguen estas reglas:

 

Si hay más de un método Java con el mismo nombre, pero cada método tiene un número diferente de argumentos, entonces se selecciona el método Java que mejor se ajusta al número de argumentos de la llamada a función.

Los tipos de datos de cadena, numéricos y booleanos de XPath/XQuery (ver lista más abajo) se convierten de forma implícita en el tipo de datos Java correspondiente. Si el tipo XPath/XQuery suministrado se puede convertir a más de un tipo Java (p. ej. xs:integer), entonces se selecciona el tipo Java que se declaró para el método seleccionado. Por ejemplo, si el método Java al que se llama es fx(decimal) y el tipo de datos XPath/XQuery suministrado es xs:integer, entonces xs:integer se convierte en el tipo de datos Java decimal.

 

La tabla que aparece a continuación enumera las conversiones implícitas de los tipos de cadena, numéricos y booleanos XPath/XQuery en tipos de datos Java.

 

xs:string

java.lang.String

xs:boolean

boolean (primitivo), java.lang.Boolean

xs:integer

int, long, short, byte, float, double y sus clases contenedoras, como java.lang.Integer

xs:float

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

xs:double

double (primitivo), java.lang.Double

xs:decimal

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

 

Los subtipos de los tipos de datos XML Schema de la tabla anterior (que se usan en XPath y XQuery) también se convierten en los tipos Java correspondientes al tipo antecesor del subtipo.

 

En algunos casos quizás no sea posible seleccionar el método Java correcto usando la información dada. Por ejemplo, imagine que:

 

El argumento presentado es un valor xs:untypedAtomic de 10 y está destinado al método mimétodo(float).

Sin embargo, hay otro método en la clase que toma un argumento de otro tipo de datos: mimétodo(double).

Puesto que los métodos tienen el mismo nombre y el tipo suministrado (xs:untypedAtomic) se puede convertir correctamente tanto en float como en double, es posible que xs:untypedAtomic se convierta en double en lugar de en float.

Por consiguiente, el método seleccionado no será el método necesario y quizás no produzca el resultado esperado. Una solución es crear un método definido por el usuario con un nombre diferente y usar ese método.

 

Los tipos que no aparecen en la lista anterior (p. ej. xs:date) no se convertirán y generarán un error. No obstante, tenga en cuenta que en algunos casos, es posible crear el tipo Java necesario usando un constructor Java.

 

© 2018-2024 Altova GmbH