在WSO2 ESB中,如何将参数从调度程序任务传递给序列

时间:2016-07-27 15:10:25

标签: wso2 wso2esb

我配置了一个调度程序任务来调用一个序列;我需要根据要求将参数传递给此序列。如何在WSO2 ESB中实现这一目标?我试图通过调度程序任务中的message属性传入值,并从序列中的消息中读取值。但未能获得序列中的值。我的代码和输出如下所示。请让我知道我应该做些什么才能让它发挥作用。感谢您提前的时间。

<asp:ScriptManager ID="scriptManager1" runat="server" AsyncPostBackTimeout="1800" />

日志文件中的输出

<task class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz" name="UploadFile2Vendor1" xmlns="http://ws.apache.org/ns/synapse">
    <trigger interval="15"/>
    <property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks">
       <request>
          <vendorId>1</vendorId>
       </request>
    </property>
    <property name="sequenceName" value="SendFile2VendorSeq" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
    <property name="injectTo" value="sequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
</task>

<sequence name="SendFile2VendorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <log>
    <property xmlns:m0="http://services.samples" 
  expression="$body/m0:request/m0:vendorId" name="vendorId"/>
  </log>
  <dblookup description="get vendor">
    <connection>
      <pool>
        <dsName>jdbc/DBDS</dsName>
      </pool>
    </connection>
    <statement>
      <sql>SELECT code, name FROM vendor WHERE id = ?</sql>
      <parameter expression="get-property('vendorId')" type="INTEGER"/>
      <result column="code" name="code"/>
      <result column="name" name="name"/>
    </statement>
 </dblookup>
</sequence>

2 个答案:

答案 0 :(得分:0)

您可以尝试的一个选项是使用org.apache.synapse.startup.tasks.TemplateMessageExecutor 作为任务类。该类公开了两个参数:

<强> 1。 templateParams

您可以在某个根元素中的XML中设置参数。 示例:

<root>
   <user>John</user>
   <age>10</age>
</root>

<强> 2。 templateKey 您可以在此处设置使用上述参数的序列模板的键。

示例:gov:/sequenceTemplates/getUserSequenceTemplate

样本序列模板

<template name="getUserSequenceTemplate" xmlns="http://ws.apache.org/ns/synapse">
    <parameter name="user"/>
    <parameter name="age"/>
    <sequence>
        <log level = "full">
           <property name="User name is" expression={$func:user} />
           <property name="User age is" expression={$func:age} />
        </log>
    </sequence>
</template>

答案 1 :(得分:0)

命名空间似乎有问题。我已经更新了任务和顺序如下。这对我有用。

任务

<task class="org.apache.synapse.startup.tasks.MessageInjector" group="synapse.simple.quartz" name="UploadFile2Vendor1" xmlns="http://ws.apache.org/ns/synapse">
        <trigger interval="15"/>
        <property name="message" xmlns:task="http://www.wso2.org/products/wso2commons/tasks">
           <request xmlns="" xmlns:m0="http://services.samples">
              <vendorId>1</vendorId>
           </request>
        </property>
        <property name="sequenceName" value="SendFile2VendorSeq" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
        <property name="injectTo" value="sequence" xmlns:task="http://www.wso2.org/products/wso2commons/tasks"/>
    </task>

序列

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse"
          name="SendFile2VendorSeq"
          trace="disable">
   <log level="full"/>
   <log>
      <property   xmlns:m0="http://services.samples"
                name="vendorId"
                expression="//vendorId"/>
   </log>
</sequence>