java - Eclipse Milo:如何获取方法参数的 DataType?
问题描述
使用eclipse milo连接OPCUA服务器,可以使用browse获取方法节点,那么如何获取方法参数的DataType呢?
就像:final BrowseDescription browseDesc = new BrowseDescription(nodeIdRoot, BrowseDirection.Forward, Identifiers.References, true, uint(NodeClass.Method.getValue()), uint(BrowseResultMask.All.getValue()));
BrowseResult browseResult = client.browse(browseDesc).get();
for (final ReferenceDescription rf : browseResult.getReferences()) {
final NodeId childId = rf.getNodeId().local().orElse(null);
List<Node> nodes = client.getAddressSpace().browse(childId).get();
for (Node node : nodes) {
// Now, I get the Node of method.
// How to get the method arguments data types?
system.out.println("need Input types {}" /*, InputArgument */);
system.out.println("will get Output types {}" /*, OutputArgument */);
}
}
解决方案
只要该方法接收输入或输出参数,方法节点就有对名为 InputArguments 和/或 OutputArguments 的属性节点的 HasProperty 引用。
如果您阅读这些节点的值属性,您将获得Argument[]
描述参数(名称、数据类型、值排名、数组维度、描述)。
UaMethodNode 拥有getInputArguments
并getOutputArguments
调用它也可以提供帮助:
UaMethodNode methodNode = (UaMethodNode) client.getAddressSpace().getNodeInstance(methodId).get();
CompletableFuture<Argument[]> iaf = methodNode
.getInputArguments()
.exceptionally(ex -> new Argument[0]);
CompletableFuture<Argument[]> oaf = methodNode
.getOutputArguments()
.exceptionally(ex -> new Argument[0]);
iaf.thenAcceptBoth(oaf, (ia, oa) -> {
System.out.println("inputArgs: " + Arrays.toString(ia));
System.out.println("outputArgs: " + Arrays.toString(oa));
});
推荐阅读
- python - 在 Python 中使用两个数据框进行简单查找
- python - 如何将python字典列表保存为matlab结构化数组的数组?
- android - 新的 Google 地方信息自动填充功能不起作用?
- python - Python:尝试从导入的包中导入模块时出现“ModuleNotFoundError”
- asp.net - 可访问性 asp.net 标签 HTML5
- docker - 同一节点中的复制服务 - Docker
- python - Tkinter - 如何让 LABEL 响应已被 BUTTON 调用的某个功能
- python - 如何在函数中获取 for 循环以单行返回(而不是打印)?
- angular - Ionic 4 双面菜单 - 打开特定菜单
- linux - 使用 docker run 启动容器,现在它没有显示在 docker ps -a