Altova XMLSpy 2024 Enterprise Edition

当在XPath/XQuery表达式中调用Java函数时,函数参数的数据类型是很重要的,用来确定调用同名的多个Java类中的哪一个。

 

在Java中,需遵循以下规则:

 

如果存在多个同名的Java方法,但每个方法都有不同数量的参数,则将选择与函数调用中参数数量最匹配的Java方法。

XPath/XQuery的字符串、数字和布尔值数据类型(参见下方列表)会被隐式地转换为相应的Java数据类型。如果所提供的XPath/XQuery类型可以被转换为不只一个Java类型(例如,xs:integer),则将选择被调用的方法中声明的Java类型。例如,如果被调用的Java方法是fx(decimal),并且提供的XPath/XQuery数据类型是xs:integer,则xs:integer将被转换为Java的decimal数据类型

 

下表列出了从XPath/XQuery的字符串、数字和布尔值类型到Java数据类型的隐式转换。

 

xs:string

java.lang.String

xs:boolean

boolean(基元类型),java.lang.Boolean

xs:integer

int, long, short, byte, float, double, 以及这些的包装类,例如java.lang.Integer

xs:float

float(基元类型),java.lang.Float, double (基元类型)

xs:double

double(基元类型),java.lang.Double

xs:decimal

float(基元类型), java.lang.Float, double((基元类型),java.lang.Double

 

上方列出的XML Schema数据类型的子类型(同时在XPath和XQuery中使用)也将被转换为与子类型的祖先类型对应的Java类型。

 

在某些情况下,可能无法根据提供的信息选择正确的Java方法。以下面这种情况为例。

 

提供的参数是一个xs:untypedAtomic,值为10,打算将其用于mymethod(float)方法。

然而,在该类中还有一个方法,采用另一个数据类型的参数:mymethod(double)

由于这两个方法的名称是相同的,并且提供的类型(xs:untypedAtomic)可以被正确地转换为floatdouble,所以xs:untypedAtomic很有可能被转换为double,而不是float

因此,选中的方法并不是所需的方法,可能无法生成预期的结果。要解决这一问题,您可以使用另一个名称创建一个用户定义的方法并使用该方法。

 

上表中没有包含的类型(例如xs:date)将不会被转换,从而产生一个错误。但是,请注意,在某些情况下,可以通过使用Java构造器来创建所需的Java类型。

 

© 2017-2023 Altova GmbH