如何在WSO2 EI Property Mediator中对SYSTEM_DATE进行加减一天操作?
WSO2 ESB 基于SYSTEM_DATE获取前后一天日期的实现方案
有两种常用的稳定实现方式:
方案1:使用XPath 2.0日期运算(轻量无额外依赖)
WSO2 ESB/EI默认支持XPath 2.0的日期运算语法,直接在Property Mediator中修改expression即可,不需要引入其他组件:
- 前一天日期获取配置:
<property expression="xs:date(get-property('SYSTEM_DATE', 'yyyy-MM-dd')) - xs:dayTimeDuration('P1D')" name="previousDay" scope="default" type="STRING"/>
- 后一天日期获取配置:
<property expression="xs:date(get-property('SYSTEM_DATE', 'yyyy-MM-dd')) + xs:dayTimeDuration('P1D')" name="nextDay" scope="default" type="STRING"/>
注意:低版本ESB如果提示xs命名空间未找到,可在序列根节点添加命名空间声明
xmlns:xs="http://www.w3.org/2001/XMLSchema",6.x以上版本默认已注册该命名空间,无需额外配置。
方案2:使用Script Mediator实现(兼容性强,适合复杂日期处理场景)
如果需要做更多自定义日期逻辑,可通过JS脚本中介器实现:
<script language="js"><![CDATA[ // 从上下文取已获取的当前日期 var currentDate = new Date(mc.getProperty("date")); // 计算前一天 var prevDate = new Date(currentDate); prevDate.setDate(currentDate.getDate() - 1); var prevDateStr = prevDate.toISOString().split('T')[0]; // 计算后一天 var nextDate = new Date(currentDate); nextDate.setDate(currentDate.getDate() + 1); var nextDateStr = nextDate.toISOString().split('T')[0]; // 将结果存入上下文供后续使用 mc.setProperty("previousDay", prevDateStr); mc.setProperty("nextDay", nextDateStr); ]]></script>
两种方案最终输出的previousDay、nextDay均为yyyy-MM-dd格式的字符串,和你原有date属性的格式完全兼容,可直接使用。
内容的提问来源于stack exchange,提问作者TandonG
相关产品推荐
相关产品推荐

