2017-06-16 65 views
0

我想向JMS隊列發送消息,隊列名稱是動態的,它將從數據庫中獲取。無法從wso2中的屬性獲取端點esb 5.0.0

隨着隊列名稱,連接工廠詳細信息,初始上下文工廠,提供者url被連接並保存在wso2 esb的屬性(endpt)中。我想在發送中介中使用最後的連接字符串(endpt)作爲端點,我給了端點類型爲XPATH並使用$ ctx:endpt(endpt是我最終形成的URL的屬性)調用變量,它不工作。

<?xml version="1.0" encoding="UTF-8"?> 
<property 
expression="fn:concat('jms://', $ctx:queueName, '? 
transport.jms.ConnectionFactoryJNDIName=', $ctx:connectionFactory,'&amp;java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory&amp;java.naming.provider.url=', 't3://localhost:7003,localhost:7004', '&amp;transport.jms.DestinationType=queue')" 
name="endpt" scope="default" type="STRING" 
xmlns="http://ws.apache.org/ns/synapse" 
xmlns:ns="http://org.apache.synapse/xsd"/> 

編輯1:下面的代碼是從代理服務調用的完整序列,

我需要$主體發送到定義在To頭端點。當我在代理服務的序列中定義發送中介中的endpt時,同樣工作,但是當我從代理服務調用上述序列(使用序列中介)時,空消息被髮送到JMS隊列。

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="sendtoconsumer" xmlns="http://ws.apache.org/ns/synapse"> 
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/> 
<property expression="//*[name() = 'CONSUMER_REFERENCE']/text()" 
name="topic" scope="default" type="STRING" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns="http://org.apache.synapse/xsd"/> 
    <property expression="fn:substring-before($ctx:topic,'//')" 
     name="topicval" scope="default" type="STRING" 
     xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns="http://org.apache.synapse/xsd"/> 
    <property 
     expression="fn:substring-before(fn:substring-after($ctx:topic,'//'),'@')" 
     name="queueName" scope="default" type="STRING" 
     xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns="http://org.apache.synapse/xsd"/> 
    <property expression="fn:substring-after($ctx:topic,'@')" 
     name="connectionFactory" scope="default" type="STRING" 
     xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns="http://org.apache.synapse/xsd"/> 
    <log level="custom"> 
     <property expression="$ctx:pubRequest" name="body" xmlns:ns="http://org.apache.synapse/xsd"/> 
     <property expression="$ctx:topic" name="topic" xmlns:ns="http://org.apache.synapse/xsd"/> 
     <property expression="$ctx:topicval" name="topicval" xmlns:ns="http://org.apache.synapse/xsd"/> 
    </log> 
    <switch source="get-property('topicval')" xmlns:ns="http://org.apache.synapse/xsd"> 
     <case regex="mq:"/> 
     <case regex="java:"> 
      <property 
       expression="fn:concat('jms://', $ctx:queueName, '?transport.jms.ConnectionFactoryJNDIName=', $ctx:connectionFactory,'&amp;java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory&amp;java.naming.provider.url=', 't3://localhost:7003,localhost:7004', '&amp;transport.jms.DestinationType=queue')" 
       name="endpt" scope="default" type="STRING"/> 
      <log level="custom"> 
       <property expression="$ctx:endpt" name="sendvalue"/> 
      </log> 
      <header expression="get-property('endpt')" name="To"/> 
      <send> 
       <endpoint> 
        <default/> 
       </endpoint> 
      </send> 
     </case> 
     <case regex="http:"/> 
     <default> 
      <log level="custom"> 
       <property expression="$ctx:topic" name="poda"/> 
      </log> 
     </default> 
    </switch> 
</sequence> 
+0

您能不能告訴你設置QUEUENAME財產,在您使用的endpt物業代理的部分? – ophychius

+0

嘗試記錄屬性endpt並查看它是否有效。在這麼長的路線上混亂真的很容易。 – simar

回答

0

Xpath端點是一個鍵表達式 - 即指向資源 - 在註冊表中或在本地端點中。

你真正需要的是一個默認的端點和頭「到」端點值:

<header name="To" expression="get-property('endpt')"/> 
<send> 
    <endpoint> 
     <default/> 
    </endpoint> 
</send> 
+0

它正在工作,但$ body沒有發送到定義的端點,我們是否應該添加一些其他屬性? 我的理解是發送中介默認發送$ body到定義的端點。 \t <屬性表達式= 「$ CTX:endpt」 名稱= 「sendvalue」 的xmlns:ns的= 「HTTP://org.apache.synapse/xsd」/> \t \t \t \t <頭表達=「GET-屬性( 'endpt')」名稱= 「要」 的xmlns:ns的= 「HTTP://org.apache.synapse/xsd」/> \t \t \t \t \t \t \t \t \t \t

+0

也許你可以添加你的配置到你的問題? –

+0

張貼在問題中,你能幫我解決嗎? –