2015-09-17 21 views
0

我試圖實現一個序列模板,該模板使用參數調用端點模板。 我的代碼如下:Wso2 Esb序列模板調用端點模板

序列 -

<sequence xmlns="http://ws.apache.org/ns/synapse" name="aFileWriteSequence" trace="disable"> 
    <log level="custom"> 
     <property name="sequence" value="aFileWriteSequence"></property> 
    </log> 
    <property xmlns:ns="http://org.apache.synapse/xsd" name="filename" expression="get-property('transport', 'FILE_NAME')" scope="default" type="STRING"></property> 
    <call-template target="FileWriteTemplate"> 
     <with-param name="targetFileName" value="A_TITLE"></with-param> 
     <with-param name="addressUri" value="vfs:file:///var/process/ren/rrout"></with-param> 
    </call-template> 
</sequence> 

序列模板 -

<template xmlns="http://ws.apache.org/ns/synapse" name="FileWriteTemplate"> 
    <parameter name="targetFileName"></parameter> 
    <parameter name="addressUri"></parameter> 
    <sequence> 
     <log level="custom"> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="TARGET_FILE_NAME" expression="$func:targetFileName"></property> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="ADDRESS_URI" expression="$func:addressUri"></property> 
     </log> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="fn:concat($func:targetFileName, '-', get-property('SYSTEM_DATE', 'yyMMddHHmmss') , '.xml')" scope="transport" type="STRING"></property> 
     <property name="OUT_ONLY" value="true"></property> 
     <send> 
     <endpoint name="ep" template="FileOutEndpointTemplate" uri="$func:addressUri"> 
      <axis2ns117:parameter xmlns:axis2ns117="http://ws.apache.org/ns/synapse" name="retries" value="3"></axis2ns117:parameter> 
      <axis2ns118:parameter xmlns:axis2ns118="http://ws.apache.org/ns/synapse" name="codes" value="1001"></axis2ns118:parameter> 
      <axis2ns119:parameter xmlns:axis2ns119="http://ws.apache.org/ns/synapse" name="factor" value="1.0"></axis2ns119:parameter> 
     </endpoint> 
     </send> 
    </sequence> 
</template> 

端點模板 -

<template xmlns="http://ws.apache.org/ns/synapse" name="FileOutEndpointTemplate"> 
    <axis2ns131:parameter xmlns:axis2ns131="http://ws.apache.org/ns/synapse" name="codes"></axis2ns131:parameter> 
    <axis2ns132:parameter xmlns:axis2ns132="http://ws.apache.org/ns/synapse" name="factor"></axis2ns132:parameter> 
    <axis2ns133:parameter xmlns:axis2ns133="http://ws.apache.org/ns/synapse" name="retries"></axis2ns133:parameter> 
    <endpoint name="$name"> 
     <address uri="$uri"> 
     <suspendOnFailure> 
      <errorCodes>$codes</errorCodes> 
      <progressionFactor>$factor</progressionFactor> 
     </suspendOnFailure> 
     <markForSuspension> 
      <retriesBeforeSuspension>$retries</retriesBeforeSuspension> 
      <retryDelay>0</retryDelay> 
     </markForSuspension> 
     </address> 
    </endpoint> 
</template> 

我已經在嘗試在$ URI幾種變化特別是我無法讓它工作。從本質上講,這裏是我得到的錯誤:

2015-09-17 16:23:31,026 [-] [SynapseWorker-19] ERROR ClientUtils The system cannot infer the transport information from the $func:addressUri URL. 
2015-09-17 16:23:31,026 [-] [SynapseWorker-19] ERROR Axis2Sender Unexpected error during sending message out 
org.apache.axis2.AxisFault: The system cannot infer the transport information from the $func:addressUri URL. 

我將不勝感激任何建議,任何人都必須配置此行:

<endpoint name="ep" template="FileOutEndpointTemplate" uri="$func:addressUri"> 

尤其是如何addressUri正在從傳遞的參數代碼在我的序列中調用序列模板。

回答

3

地址端點不支持動態端點。因此,您無法將動態值($func:addressUri是動態的)傳遞給模板端點的uri參數。因此,如果你想擁有一個動態的端點,那麼你可以使用一個默認的端點和一個可以動態設置的「To」頭。以下是對您的工件的更改。

  1. 用頭中介在你的序列模板只需發送調停之前,如下圖所示沒有改變你的序列
  2. 設置To頭。
<template xmlns="http://ws.apache.org/ns/synapse" name="FileWriteTemplate"> 
    <parameter name="targetFileName"></parameter> 
    <parameter name="addressUri"></parameter> 
    <sequence> 
     <log level="custom"> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="TARGET_FILE_NAME" expression="$func:targetFileName"></property> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="ADDRESS_URI" expression="$func:addressUri"></property> 
     </log> 
     <property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="fn:concat($func:targetFileName, '-', get-property('SYSTEM_DATE', 'yyMMddHHmmss') , '.xml')" scope="transport" type="STRING"></property> 
     <property name="OUT_ONLY" value="true"></property> 
     <header name="To" expression="$func:addressUri"/> 
     <send> 
     <endpoint name="ep" template="FileOutEndpointTemplate"> 
      <axis2ns117:parameter xmlns:axis2ns117="http://ws.apache.org/ns/synapse" name="retries" value="3"></axis2ns117:parameter> 
      <axis2ns118:parameter xmlns:axis2ns118="http://ws.apache.org/ns/synapse" name="codes" value="1001"></axis2ns118:parameter> 
      <axis2ns119:parameter xmlns:axis2ns119="http://ws.apache.org/ns/synapse" name="factor" value="1.0"></axis2ns119:parameter> 
     </endpoint> 
     </send> 
    </sequence> 
</template> 
  • 更改地址端點默認端點在端點模板,如下圖所示
  • <template xmlns="http://ws.apache.org/ns/synapse" name="FileOutEndpointTemplate"> 
        <axis2ns131:parameter xmlns:axis2ns131="http://ws.apache.org/ns/synapse" name="codes"></axis2ns131:parameter> 
        <axis2ns132:parameter xmlns:axis2ns132="http://ws.apache.org/ns/synapse" name="factor"></axis2ns132:parameter> 
        <axis2ns133:parameter xmlns:axis2ns133="http://ws.apache.org/ns/synapse" name="retries"></axis2ns133:parameter> 
        <endpoint name="$name"> 
         <default> 
         <suspendOnFailure> 
          <errorCodes>$codes</errorCodes> 
          <progressionFactor>$factor</progressionFactor> 
         </suspendOnFailure> 
         <markForSuspension> 
          <retriesBeforeSuspension>$retries</retriesBeforeSuspension> 
          <retryDelay>0</retryDelay> 
         </markForSuspension> 
         </default> 
        </endpoint> 
    </template> 
    

    這一解決方案背後的想法是,你可以動態設置To標頭,默認端點將把消息發送到「收件人」標題中找到的端點。

    請參閱this瞭解更多詳情。

    1

    +0

    謝謝您的信息和建議Rajkumar!我已經實施了你的建議,而且效果很好。再次感謝! –