0

このように入力した xpath を使用して wso2esb の文字列を分割したい

<property name="Message" value="assetname:ups,assetcode:452chi,assetid:548935,assetvalue:215" scope="default"/>

xpathを使用して同じプロパティでブレークする必要があります

assetname:ups
assetcode=452chi
assetid=54895
assetvalue=215

このために、トークン化機能を試しましたが、wso2esbが構成ファイルにエラーを表示しています

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Xpathcheck" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="max" value="1" scope="default" type="STRING"/>
         <property name="min" value="1" scope="default" type="STRING"/>
         <property name="MessageText" expression="fn:concat('Assetid:',get-property('min'),',','Assetname:',get-property('max'))" scope="default" type="STRING"/>
         <property name="Tokenize" expression="fn:tokenize(get-property('Messagetext'),',')" scope="default" type="STRING"/>
         <log>
            <property name="MessageText" expression="get-property('MessageText')"/>
            <property name="Tokenize" expression="get-property('Tokenize')"/>
         </log>
               </inSequence>
      <outSequence/>
   </target>
   <description></description>
</proxy>

しかし、このようなスローエラーは、これについて何か考えがあります。これをDbテーブルに1つのフィールドとして保存する必要があります。これは、別々の行のエラーのように見えます

ERROR - SynapseXPath Evaluation of the XPath expression fn:tokenize(get-property('Messagetext'),',') resulted in an error
org.jaxen.UnresolvableException: No Such Function tokenize
4

2 に答える 2

4

tokenize は XPath 2.0 に付属する関数です。XPath 2.0 関数を有効にするには、$ESB_HOME/repository/conf ディレクトリにある synapse.properties ファイルの次のエントリのコメントを解除します。

synapse.xpath.dom.failover.enabled=true

次に、メディエーターを次のように指定する必要があります。

<property name="Message" value="a,b,c,d,e" scope="default"/>
         <property xmlns:fn="http://www.w3.org/2005/xpath-functions" name="Tokenize" expression="fn:tokenize(syn:get-property('Message'),',')" scope="default" type="STRING"/>
于 2013-07-15T07:22:39.003 に答える
1

これは XPath を介して実行できるとは思いません。XPath は XML 内の要素をナビゲートすることです。これを行うには、スクリプト メディエーターを使用し、JS を記述してプロパティ値を分割します。以下を使用して、スクリプト メディエーターから ESB パラメーターにアクセスします。

<script language="js"> var test_param = mc.getProperty('Message')

以下を使用して、スクリプト メディエーター内のパラメーターを取得して ESB に戻します。

mc.setProperty("param1",var1)
mc.setProperty("param2",var2)

JavaScript を使用して、必要な文字列操作を実行します。

于 2013-07-11T08:07:46.980 に答える