WSO2 SP Siddhi xml 从 wso2event 解析

WSO2 SP Siddhi xml parsing from wso2event

我在 wso2 SP 上将输入流作为 wso2event,它包含时间戳和有效负载。有效载荷采用 xml 格式。如何将此有效负载解析为变量?我看到了这个文档 https://wso2-extensions.github.io/siddhi-map-xml/api/4.0.11/ 但我不知道,如何将传入的 wso2event 传递给 sourcemapper 然后将其解析为变量?

siddhi-map-* 扩展用于在 source/sink 级别映射 input/output 事件属性。

由于此 xml 有效载荷是另一个流的属性,您可以使用 siddhi-execution-map 扩展从该 xml 创建地图.

然后您可以在 siddhi 应用程序中将 xml 有效载荷作为散列图处理。

有关这方面的更多详细信息,请参阅文档[1]。

[1] https://wso2-extensions.github.io/siddhi-execution-map/

好的,我意识到,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 上制作票证来解决这个错误吗?