java - 无法使用 XPath 匹配功能来查找与名称模式与 vRealize Orchestrator 的 VcPlugin 匹配的虚拟机
问题描述
就上下文而言,下面的代码示例是用 Javascript (Mozilla Rhino) 编写的,但VcPlugin
实现是用 Java 完成的。vRealize Orchestrator 在执行代码时依赖于这两个运行时,并且一些 Java 构造暴露给通过 Rhino 执行的脚本。我不确定发生的事情是否与这两种语言的独特组合有关,所以我在这两个类别下都标记了这个问题。
在 vRO 7.6 中,我们使用VcPlugin
6.5 从 vCenter 中提取清单。我正在尝试返回VC:VirtualMachine
与特定命名模式匹配的所有对象。现在我有以下代码使用该XPath
starts-with
函数,但这并不理想,因为我们需要starts-with
为每个可能的字符调用,这些字符在 VM 名称的开头可能是唯一的:
var vCenterVMs = connection.getAllVirtualMachines(
['name'],
"xpath:name[starts-with(.,'acc') or starts-with(.,'aco') or starts-with(.,'acm')]" );
这有效,并返回VC:VirtualMachine
名称与模式匹配的任何对象^ac[com]
。但是,我尝试使用该XPath
matches
函数来匹配命名模式,因为表达式更易于维护:
var vCenterVMs = connection.getAllVirtualMachines(
['name'],
'xpath:name[matches(.,"^ac[com]")]' );
这不返回任何内容。此外,^
从上述表达式中删除标记也不会返回任何内容,就像删除所有正则表达式标记并简单地'acc'
使用matches
函数查找一样:
var vCenterVMs = connection.getAllVirtualMachines( ['name'], "xpath:name[matches(.,'acc')]" );
我还尝试了在同一个插件的供应商工作流程之一中找到的替代语法,但无济于事(供应商工作流程成功使用matches
但使用不同的属性,而不是name
):
var vCenterVMs = connection.getAllVirtualMachines( null, "xpath:matches(name, '^ac[com]')]" );
我的第一个想法是,也许这个插件XPath
由于某种原因被 1.0 卡住了(1.0 没有定义fn:matches
),但是来自同一个插件的其他工作流使用了这个XPath
matches
功能,所以插件必须实现XPath
2.0,如果不是更新的话。
我无法从 VMware 找到有关 vCenter API 或其本身使用的XML
架构或XPath
版本的VcPlugin
文档(vCenter REST API 文档举例说明了在响应中使用 JSON,进一步混淆了水域),但 a 的name
属性VC:VirtualMachine
是一种类型的String
。这里发生了什么starts-with
工作正常但等效的正则表达式失败?
解决方案
推荐阅读
- python - “MySQLConnection”对象没有属性“_cmysql”
- java - 是否可以使用 Spring Data Jpa 规范实现长度(属性)并按后者排序
- python - 如何用循环制作矩阵?
- nestjs - NestJS 提供 JSON 并添加重复 JSON 的“默认”部分
- android - 接收麦克风音频,然后立即发出声音
- javascript - ArcGIS javascript 查询任务未返回任何特征
- java - 如何从下载文件夹以编程方式安装 Android 应用更新
- python - Python:有什么方法可以检查目标窗口是否在最上面?
- ios - 如何在 iOS 中更改 UIColorPickerViewController 的语言?
- sql - SQL数据操作(添加FK并显示来自不同表的数据)