【问题标题】:In WSO2 ESB, how to pass parameter to sequence from scheduler task在 WSO2 ESB 中,如何将参数从调度程序任务传递给序列
【发布时间】:2016-08-20 18:59:24
【问题描述】:

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

<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>

在日志文件中输出

[2016-07-27 09:25:36,446] DEBUG - StartUpController Synapse server name : localhost
[2016-07-27 09:25:36,446] DEBUG - StartUpController loaded task property : <property xmlns="http://ws.apache.org/ns/synapse" xmlns:task="http://www.wso2.org/products/wso2commons/tasks" name="injectTo" value="sequence"/>
[2016-07-27 09:25:36,446] DEBUG - StartUpController loaded task property : <property xmlns="http://ws.apache.org/ns/synapse" xmlns:task="http://www.wso2.org/products/wso2commons/tasks" name="sequenceName" value="SendFile2VendorSeq"/>
[2016-07-27 09:25:36,446] DEBUG - StartUpController loaded task property : <property xmlns="http://ws.apache.org/ns/synapse" xmlns:task="http://www.wso2.org/products/wso2commons/tasks" name="message">
  <request>
    <vendorId>1</vendorId>
  </request>
</property>

[2016-07-27 09:25:36,446] DEBUG - PropertyHelper Setting property :: invoking method setMessage(<request xmlns="http://ws.apache.org/ns/synapse">
  <vendorId>1</vendorId>
</request>)
[2016-07-27 09:25:36,446] DEBUG - MessageInjector set message <request xmlns="http://ws.apache.org/ns/synapse">
  <vendorId>1</vendorId>
</request>
[2016-07-27 09:25:36,446] DEBUG - TaskScheduler TaskScheduler already initialized.
[2016-07-27 09:25:36,532]  INFO - AbstractQuartzTaskManager Task scheduled: [-1234][ESB_TASK][Upload2Vendor]
[2016-07-27 09:25:36,532]  INFO - NTaskTaskManager Scheduled task [NTask::-1234::Upload2Vendor]
[2016-07-27 09:25:36,532] DEBUG - StartUpController Submitted task [Upload2Vendor] to Synapse task scheduler.
[2016-07-27 09:25:36,532] DEBUG - TaskDeployer Initialized the StartupTask : Upload2Vendor
[2016-07-27 09:25:36,532] DEBUG - TaskDeployer StartupTask Deployment from file : C:\MyApps\wso2esb-4.9.0\tmp\carbonapps\-1234\1469629535899ESBCDRCApp_1.0.0.car\UploadCDR2CDG_1.0.0\Upload2Vendor-1.0.0.xml : Completed
[2016-07-27 09:25:36,532]  INFO - TaskDeployer StartupTask named 'Upload2Vendor' has been deployed from file : C:\MyApps\wso2esb-4.9.0\tmp\carbonapps\-1234\1469629535899ESBCDRCApp_1.0.0.car\UploadCDR2CDG_1.0.0\Upload2Vendor-1.0.0.xml
[2016-07-27 09:25:36,532] DEBUG - SynapseArtifactDeploymentStore Added deployment artifact with file : C:\MyApps\wso2esb-4.9.0\tmp\carbonapps\-1234\1469629535899ESBCDRCApp_1.0.0.car\UploadCDR2CDG_1.0.0\Upload2Vendor-1.0.0.xml
[2016-07-27 09:25:36,532] DEBUG - AbstractSynapseArtifactDeployer Deployment of the synapse artifact from file : C:\MyApps\wso2esb-4.9.0\tmp\carbonapps\-1234\1469629535899ESBCDRCApp_1.0.0.car\UploadCDR2CDG_1.0.0\Upload2Vendor-1.0.0.xml : COMPLETED
[2016-07-27 09:25:36,532]  INFO - ApplicationManager Successfully Deployed Carbon Application : ESBCDRCApp_1.0.0 {super-tenant}
[2016-07-27 09:25:36,532] DEBUG - MessageInjector execute
[2016-07-27 09:25:36,532] DEBUG - Axis2SynapseEnvironment Creating Message Context
[2016-07-27 09:25:36,542] DEBUG - MessageInjector injecting message to sequence : SendFile2VendorSeq
[2016-07-27 09:25:36,542] DEBUG - Axis2SynapseEnvironment Injecting MessageContext for asynchronous mediation using the : SendFile2VendorSeq Sequence
[2016-07-27 09:25:36,552] DEBUG - SequenceMediator Start : Sequence <SendFile2VendorSeq>
[2016-07-27 09:25:36,552] DEBUG - SequenceMediator Sequence <SequenceMediator> :: mediate()
[2016-07-27 09:25:36,552] DEBUG - SequenceMediator Mediation started from mediator position : 0
[2016-07-27 09:25:36,552] DEBUG - SequenceMediator Building message. Sequence <SequenceMediator> is content aware
[2016-07-27 09:25:36,552] DEBUG - LogMediator Start : Log mediator
[2016-07-27 09:25:36,552]  INFO - LogMediator To: , MessageID: urn:uuid:c620513a-5b90-452e-8133-d5fd23e2cce0, Direction: request, vendorId = 
[2016-07-27 09:25:36,552] DEBUG - LogMediator End : Log mediator
[2016-07-27 09:25:36,552] DEBUG - DBLookupMediator Start : DBLookup mediator
[2016-07-27 09:25:36,582] DEBUG - DBLookupMediator Getting a connection from DataSource jdbc/CallOneCDRDB and preparing statement : 
SELECT SELECT code, name FROM vendor WHERE id = ?
[2016-07-27 09:25:36,662] DEBUG - DBLookupMediator Setting as parameter : 1 value : null as JDBC Type : 4(see java.sql.Types for valid types)
[2016-07-27 09:25:36,662] DEBUG - DBLookupMediator Successfully prepared statement : 
SELECT code, name FROM vendor WHERE id = ?

【问题讨论】:

  • 如何生成/接收消息?难道你不能只将 vendorId 保留在一个属性中,然后将它与 get-property 一起使用吗?

标签: wso2 wso2esb


【解决方案1】:

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

1.模板参数

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

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

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

例如: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>

【讨论】:

  • 你好,maheeka,我会试试这个。您是否有解析参数的序列模板的代码示例?谢谢。
  • 添加了样本序列模板
  • 我在我的应用程序中实现了这种方法。按预期工作。谢谢。
【解决方案2】:

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

任务

<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>

【讨论】:

  • Jenananthan,我用属性调解器替换了日志调解器,并更正了序列中的 xpath 表达式。但是,当我打印新属性 vendorId 时,我仍然执行该值。日志如下所示 LogMediator To: , MessageID: urn:uuid:124b8764-bf35-41a4-b660-3cc22d60925c, Direction: request, message = vendorId = 由于此属性将作为参数传递给 中介,因此为空值传入而不是 1。 DEBUG - DBLookupMediator 设置为参数:1 值:null 作为 JDBC 类型:4(有关有效类型,请参阅 java.sql.Types)
  • 所以我会说属性的值没有设置。为什么?
猜你喜欢
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
相关资源
最近更新 更多