Altova XMLSpy 2024 Enterprise Edition

Java扩展函数可以在XPath或XQuery表达式中使用,以调用Java构造器或Java方法(静态或实例)。

 

Java类中的字段被视为一个不带任何参数的方法。一个字段可以是静态字段或实例字段。有关如何调用字段的说明,请参见静态字段和实例字段部分。

 

本部分分为以下几个小节:

 

Java: 构造器

Java: 静态方法和静态字段

Java: 实例方法和实例字段

数据类型:从XPath/XQuery到Java

数据类型:从Java到XPath/XQuery

 

请注意以下几点:

如果您使用的是Altova桌面产品,该产品将尝试通过读取以下内容(按照以下顺序)自动检测到Java虚拟机的路径:(i) Windows注册表,以及(ii) JAVA_HOME 环境变量。您还可以在应用程序的“选项”对话框中添加自定义路径;该条目将优先于自动检测到的任何其他Java VM路径。

如果您是在Windows机器上运行Altova服务器产品,则会先从Windows注册表中读取Java虚拟机路径;如果不成功,则会使用JAVA_HOME环境变量。

如果您是在Linux或macOS机器上运行Altova服务器产品,请确保已正确设置JAVA_HOME环境变量,并且Java虚拟机库(在Windows上为jvm.dll文件)可以在\bin\server\bin\client目录下找到。

 

扩展函数的形式

XPath/XQuery表达式中的扩展函数必须具有以下形式:prefix:fname()

 

prefix:部分将扩展函数标识为一个Java函数。它通过将扩展函数与一个范围内的命名空间声明相关联,其URI必须以java:开头(有关示例,请参见下文)。命名空间声明应标识一个Java类,例如: xmlns:myns="java:java.lang.Math". 然而,它也可以简单地写作: xmlns:myns="java" (不带冒号),扩展函数的fname()部分标识Java类。

fname()部分标识了正在被调用的Java方法,并提供了该方法的参数(参见下方示例)。然而,如果由prefix:部分标识的命名空间URI没有标识一个Java类(参见上文),则应在fname()部分标识该Java类,在该类之前用一个点与该类分开(参见下方第二个XSLT示例)。

 

提示:被调用的类必须是本机的classpath。

 

XSLT示例

下面的两个示例展现了如何调用一个静态方法。在第一个示例中,类名称(java.lang.Math)已被包括在命名空间URI中,因此不得在fname()部分中。在第二个示例中,prefix:部分提供了前缀java:,而fname()部分标识了类以及方法。

 

 <xsl:value-of xmlns:jMath="java:java.lang.Math
                 select="jMath:cos(3.14)" />

 

 <xsl:value-of xmlns:jmath="java
                 select="jmath:java.lang.Math.cos(3.14)" />

 

扩展函数中的方法 (上方示例中的cos()必须与Java类中公共静态方法的名称(上方示例的java.lang.Math相匹配。

 

XQuery示例

下面的XQuery示例与上面的XSLT示例类似:

 

 <cosine xmlns:jMath="java:java.lang.Math">

    {jMath:cos(3.14)}

 </cosine>

 

用户定义的Java类

如果您已创建您自己的Java类,则在调用这些类中的方法时会有所不同,这取决于:(i) 这些类是通过JAR文件,还是通过类文件访问,以及(ii) 这些文件(JAR或类)是否位于当前目录(XSLT或XQuery文档所在的目录)。有关如何定位这些文件的说明,请参见用户定义的类文件用户定义的Jar文件。请注意,不在当前目录中的类文件和所有JAR文件的路径必须被指定。

 

© 2017-2023 Altova GmbH