WSO2 esb端点模板uri参数concat

时间:2015-02-08 21:02:18

标签: templates parameters wso2 esb endpoint

我想创建一个参数化端点,根据消息内容将消息发送到JMS队列,例如, MY_QUEUE。因此端点uri应该看起来像

jms:/MY_QUEUE?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue

我创建了这样的端点模板:

<template xmlns="http://ws.apache.org/ns/synapse" name="TM_out_endpoint_template">
   <axis2ns158:parameter xmlns:axis2ns158="http://ws.apache.org/ns/synapse" name="queue"></axis2ns158:parameter>
   <endpoint name="$name">
      <address uri="jms:/$queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue">
         <suspendOnFailure>
            <progressionFactor>1.0</progressionFactor>
         </suspendOnFailure>
         <markForSuspension>
            <retriesBeforeSuspension>0</retriesBeforeSuspension>
            <retryDelay>0</retryDelay>
         </markForSuspension>
      </address>
   </endpoint>
</template>

但是像这样,$ queue参数将不会被处理。如果我替换整个URI,它可以工作,但我想将URI的其余部分保留在模板中,而不是从调用序列中传递它们。简而言之,我只想传递队列名称。如何在端点模板中使用字符串连接param?例如。 jms:/ $ {queue}?transport ......或者其他东西。有办法吗?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为$ queue参数中的$在模板渲染过程中被忽略,因为之前是/。因此,您必须使用jms:/前缀填充队列名称。

这是模板的修改版本。

<template xmlns="http://ws.apache.org/ns/synapse" name="TM_out_endpoint_template">
   <axis2ns158:parameter xmlns:axis2ns158="http://ws.apache.org/ns/synapse" name="queue"></axis2ns158:parameter>
   <endpoint name="$name">
      <address uri="$queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue">
         <suspendOnFailure>
            <progressionFactor>1.0</progressionFactor>
         </suspendOnFailure>
         <markForSuspension>
            <retriesBeforeSuspension>0</retriesBeforeSuspension>
            <retryDelay>0</retryDelay>
         </markForSuspension>
      </address>
   </endpoint>
</template>