我在 wso2 SP 上有输入流作为 wso2event,它包含时间戳和有效负载。有效载荷为 xml 格式。如何将此有效负载解析为变量?我看到这个文档https://wso2-extensions.github.io/siddhi-map-xml/api/4.0.11/但我不知道,如何将传入的 wso2event 获取到 sourcemapper,然后将其解析为变量?
问问题
260 次
2 回答
2
siddhi-map-*扩展用于在源/接收器级别映射输入/输出事件属性。
由于此 xml 有效负载是另一个流的属性,因此您可以使用siddhi-execution-map扩展从该 xml 创建一个映射。
然后,您可以在 siddhi 应用程序中将 xml 有效负载作为哈希图处理。
有关这方面的更多详细信息,请参阅文档 [1]。
于 2018-03-20T11:23:31.713 回答
1
好的,我意识到https://wso2-extensions.github.io/siddhi-execution-map/api/latest/createFromXML 函数中存在错误。此函数正确解析每个元素的 xml 文件,但存在错误定义的 HashMap,因为函数是递归调用的,并且每个循环都会创建新映射并覆盖旧映射中的数据。所以最后,只有一个键的地图。
private Object getMapFromXML(OMElement parentElement) throws XMLStreamException {
Map<Object, Object> topLevelMap = new HashMap<Object, Object>();
Iterator iterator = parentElement.getChildElements();
while (iterator.hasNext()) {
OMElement streamAttributeElement = (OMElement) iterator.next();
String key = streamAttributeElement.getQName().toString();
Object value;
if (streamAttributeElement.getFirstElement() != null) {
value = getMapFromXML(streamAttributeElement);
} else {
logger.info("getFirstElement is null now, iam in else - " + key);
String elementText = streamAttributeElement.getText();
if (elementText.equals("true") || elementText.equals("false")) {
value = Boolean.parseBoolean(elementText);
} else {
if (NumberUtils.isNumber(elementText)) {
try {
value = numberFormat.parse(elementText);
} catch (ParseException e) {
value = elementText;
}
} else {
value = elementText;
}
}
}
topLevelMap.put(key, value);
}
return topLevelMap;
}
topLevelMap 应声明为私有全局变量。有人可以在 wso2 github 上开票来解决这个错误吗?
于 2018-03-21T13:14:33.903 回答