定时任务引用Sequence Template报错,寻求解决方案
问题:定时任务引用Sequence Template报错,直接引用Sequence正常
测试定时任务时,直接引用Sequence可正常运行,但引用Sequence Template时出现报错,需求是通过定时任务调用模板中的Sequence。
现有代码
定时任务配置
<task class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz" name="CheckGrandOak" xmlns="http://ws.apache.org/ns/synapse"> <trigger interval="5"/> <property name="sequenceName" value="ScheduledTask" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> <property name="format" value="text/xml" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> <property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"> <message xmlns="">Welcome to the new world</message> </property> <property name="injectTo" value="template" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> </task>
API配置
<api context="/tasks" name="ScheduledTasks" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET"> <inSequence> <log> <property name="message" value="This is the API"/> </log> <call-template target="ScheduledTask"/> <respond/> </inSequence> <outSequence/> <faultSequence/> </resource> </api>
Sequence Template文件名为ScheduledTask.xml。
解决方案
MessageInjector定时任务并不直接支持injectTo="template"的配置,需要通过中转Sequence来调用目标模板,步骤如下:
- 创建中转Sequence
在序列目录下创建一个普通Sequence(示例命名为InvokeTemplateSequence),内部通过<call-template>调用你的目标Sequence Template:
<sequence name="InvokeTemplateSequence" xmlns="http://ws.apache.org/ns/synapse"> <call-template target="ScheduledTask"/> </sequence>
- 修改定时任务配置
将定时任务的sequenceName改为中转Sequence的名称,同时把injectTo值改为sequence:
<task class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz" name="CheckGrandOak" xmlns="http://ws.apache.org/ns/synapse"> <trigger interval="5"/> <property name="sequenceName" value="InvokeTemplateSequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> <property name="format" value="text/xml" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> <property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"> <message xmlns="">Welcome to the new world</message> </property> <property name="injectTo" value="sequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/> </task>
- 确认模板部署
确保ScheduledTask.xml已正确放置在WSO2 EI的模板目录(通常为repository/deployment/server/synapse-configs/default/templates/),并已加载生效。
内容的提问来源于stack exchange,提问作者Mugisha Solomon Bekunda
相关产品推荐
相关产品推荐

