2017-04-19 1 views
0

実際、空の文字列を持つWSO2 ESBのシーケンスでプロパティを設定すると、空の値を取得しようとしています。私は多くのことを試してみましたが、常に結果を得ている「ヌル」または「\」\「」の代わりに「私はプロパティを取得するとき」、ここに私のコードです:WSO2ESB:空の値を受け付けないプロパティ設定

<property value="&quot;&quot;" 
name="arq.general.DestinationSystem" scope="default" 
type="STRING" xmlns:ns="http://org.apache.synapse/xsd" 
xmlns:ns2="http://org.apache.synapse/xsd"/> 
<property name="arq.general.ParentInstanceID" scope="default" 
type="STRING" value=""/> 
<property expression="get-property('NonExistentProperty')" 
name="arq.functional.User" 
scope="default" type="STRING" 
xmlns:ns="http://org.apache.synapse/xsd" 
xmlns:ns2="http://org.apache.synapse/xsd"/> 

あなたは助けることができるしてくださいますか?

乾杯、

トニー

++ペイロード工場:

<payloadFactory media-type="xml"> 
      <format> 
       <MensajeAuditoria xmlns=""> 
        <Timestamp>$1</Timestamp> 
        <TrackingID>$2</TrackingID> 
        <SourceApplication>$3</SourceApplication> 
        <OperationName>$4</OperationName> 
        <ParentInstanceID>$5</ParentInstanceID> 
        <InstanceID>$6</InstanceID> 
        <ServiceID>$7</ServiceID> 
        <FunctionalID>$8</FunctionalID> 
        <AdapterType>$9</AdapterType> 
        <AdapterPoint>$10</AdapterPoint> 
        <HostName>$11</HostName> 
        <User>$12</User> 
       </MensajeAuditoria> 
      </format> 
      <args> 
       <arg evaluator="xml" expression="get-property('SYSTEM_TIME')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.TrackingID')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.SourceApplication')"/> 
       <arg evaluator="xml" expression="get-property('arq.functional.OperationName')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.ParentInstanceID')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.InstanceID')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.ServiceID')"/> 
       <arg evaluator="xml" expression="get-property('arq.functional.FunctionalID')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.AdapterType')"/> 
       <arg evaluator="xml" expression="$func:AdapterPoint"/> 
       <arg evaluator="xml" expression="get-property('SERVER_IP')"/> 
       <arg evaluator="xml" expression="get-property('arq.functional.User')"/> 

      </args> 
     </payloadFactory> 
    </else> 
</filter> 
<property name="messageType" scope="axis2" type="STRING" value="application/json"/> 

工場出荷時の結果を追加:

{ 
"MensajeAuditoria": { 
    "Timestamp": 1492777451830, 
    "TrackingID": "76b9858d-8421-4d7e-d2af-e8e411382e2e", 
    "SourceApplication": "API Manager", 
    "OperationName": null, 
    "ParentInstanceID": null, 
    "InstanceID": "76b9858d-8421-4d7e-d2af-e8e411382e2e", 
    "ServiceID": "PRX_PROY1_AEX_AltaCliente", 
    "FunctionalID": null, 
    "AdapterType": "AEXP", 
    "AdapterPoint": "PreActRequest", 
    "HostName": "172.16.3.97", 
    "User": null, 
}} 
+0

はあなたが私に言うことができる、あなたの問題解決に役立ち、また、出力があなたのParentInstanceIDプロパティ何のためにあるのか。私がそのようなプロパティを作成してログに記録すると、ログに空の文字列が表示され、表示される結果は表示されません。 – ophychius

+0

こんにちは、私はWSO2 ESB 5.0.0を使用しています。JMS経由で送信すると、payloadFactoryを割り当てたときに、受け取ったJSONメッセージがnull値で表示されます。 –

+0

ペイロード・ファクトリを表示できますか?空のプロパティでない場合は、文字列やintなどを保持するはずですか? – ophychius

答えて

0

を私はJavaScriptを使用して回避策達成しているが、財産仲介人にそれを設定することが可能でなければならないし、豊かにすることもできる。

<script language="js"><![CDATA[var payload = mc.getPayloadJSON(); 
if(payload.MensajeAuditoria.ParentInstanceID== null){ 
    payload.MensajeAuditoria.ParentInstanceID="";  
} 
mc.setPayloadJSON(payload); 
mc.setProperty("MyProperty","");]]></script> 

XMLソリューションをお持ちの場合は、教えてください。

ありがとうございました。

0

他のソリューションは、「文字列」XPath関数を使用することです:

<property name="arq.general.ParentInstanceID" expression="string('')"/> 
+0

返事をお寄せいただきありがとうございます。 JavaScriptスクリプトだけで動作しました。 payloadFactoryはXMLからJSONへの変換を行い、値をnull値で置き換えると思います。 –

0

私はあなたのpayloadFactoryを試してみましたし、それが4.8.1の魅力のように動作しますが、それは5.0.0で失敗が判明しました。これはESBで使用するJSONメッセージビルダーの変更の可能性が最も高いです。問題はあなたの空のプロパティではなく、messageTypeプロパティを設定したときに起こるXMLからJSONへの自動変換にあります。あなたはこのかかわらずを解決するために何ができるか

は、次のようにペイロードメディエーターはすぐにJSONを作成するメイクです:

<payloadFactory media-type="json"> 
      <format> 
       {"MensajeAuditoria":{ 
        "Timestamp":$1, 
        "TrackingID":"$2" 
        ... 
       } 
       } 

      </format> 
      <args> 
       <arg evaluator="xml" expression="get-property('SYSTEM_TIME')"/> 
       <arg evaluator="xml" expression="get-property('arq.general.TrackingID')"/> 
       ... 
      </args> 
     </payloadFactory> 
    </else> 
</filter> 

あなたが引用符の制御である。この方法で、それはヌルがない限り置くことは決してありませんあなたは実際にそこに欲しいです。

希望はこれは、使用しているESBのバージョン

+0

素晴らしい!!!!どうもありがとうございました!!!あなたの回答は正しいとマークしましたが、私はこの新しいアカウントを持っています.15ポイントの評判を得るまでマークされません。(とにかくありがとう。 –

0
Good thing would be to use enrich mediator to map the json field to xml field if there is a vale for the incoming field. 
Sample 
     <filter regex="true" source="boolean(get-property('START_DATE'))"> 
     <then> 
      <enrich description="Add startDate tag"> 
      <source clone="true" type="inline"> 
       <org:startDate xmlns:org="urn:example.com/service/org"/> 
      </source> 
      <target action="child" xpath="//*[local-name()=get-property('RequestType')]"/> 
      </enrich> 
      <enrich description="populate startDate"> 
      <source clone="true" property="START_DATE" type="property"/> 
      <target 
       xmlns:org="urn:example.com/servi`enter code here`ce/org" xpath="//org:startDate"/> 
      </enrich> 
     </then> 
     <else/> 
     </filter> 
関連する問題