我正在尝试构建自定义接收器适配器。这将从CSV文件读取并将事件推送到流。 据我所知,我们必须遵循任何WSO2标准格式(TEXT,XML或JSON)将数据推送到流中。
问题是,CSV文件与上述任何标准格式都不匹配。我们必须将csv值转换为自定义适配器中任何支持的格式。 根据我的观察,WSO2 TEXT格式不支持字符串值中的逗号(,)。所以,我决定转换CSV JSON。
我的问题如下:
(如果不能点1)在我的自定义适配器MessageType中,如果我只添加TEXT或全部3(TEXT,XML,JSON),它可以正常工作。但如果我只添加JSON,我会得到以下错误。我的目标是只添加JSON并将所有CSV转换为JSON以避免混淆。
[2016-09-19 15:38:02,406] ERROR {org.wso2.carbon.event.receiver.core.EventReceiverDeployer} - Error, Event Receiver not deployed and in inactive state, Text Mapping is not supported by event adapter type file
答案 0 :(得分:0)
要从CSV文件读取并将事件推送到流,您可以使用文件尾适配器。请参阅示例“Receiving Custom RegEx Text Events via File Tail”。此示例包含可用于映射CSV输入的正则表达式模式。
除此之外,正如Charini在评论中建议的那样,您还可以查看event simulator。但是,事件模拟器不是事件接收器 - 意味着它不会实时接收事件,而是“播放”先前定义的一组事件(在CSV文件中,在这种情况下)以模拟事件流。它不会持续监视文件以查找新事件。如果要监视文件以查找新事件,请考虑使用文件尾适配器。
答案 1 :(得分:0)
我刚刚做到了。不是一种优雅的方式。但它对我来说很好。
正如我所提到的,JSON格式对我来说是最灵活的。我正在从文件中读取并将每个行/事件转换为WSO2 JSON格式。
此选项的问题是,我想将消息格式仅限于管理控制台中的JSON("消息格式"创建新接收器时的菜单)。如果我只添加JSON [()
],则会显示我在上面的问题#2中提到的错误。
解决方案是,不使用MessageType类中的静态变量,而是直接使用相应的字符串。现在,我的方法" SELECT CONVERT(datetime,([Date]+' '+[Time]),103) FROM LPTables
WHERE ISNULL([Date],'')!='' AND ISNULL([Time],'')!=''
"在EventAdapterFactory类中如下:
supportInputMessageTypes.add(MessageType.JSON)
我对WSO2团队的请求,请允许JSON格式事件适配器类型文件。
谢谢,Obaid