0

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

4

2 回答 2

2

siddhi-map-*扩展用于在源/接收器级别映射输入/输出事件属性。

由于此 xml 有效负载是另一个流的属性,因此您可以使用siddhi-execution-map扩展从该 xml 创建一个映射。

然后,您可以在 siddhi 应用程序中将 xml 有效负载作为哈希图处理。

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

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

于 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 回答