2017-06-30 7 views
1

スクリプトメディエータを使用してesb wso2のjson配列をxml配列に変換するコードを記述しているときに、 "未定義から"。助けてください。 私のスクリプトメディエーターコードスクリプトメディエータesb wso2の「不明な長さ」から「プロパティを読み取ることができません」

<script language="js"><![CDATA[ 
        payload = mc.getPayloadJSON(); 
    results = payload.results; 
    var response = <locations/>; 
    for (i = 0; i < results.length; ++i) { 
     var elem = results[i]; 
     response.locations += <jacdevice> 
      <JACDeviceId>{elem.Id}</JACDeviceId> 
      <Make>{elem.ManufacturerName}</Make> 
      <Model>{elem.ModelName}</Model> 
     </jacdevice> 
    } 
    mc.setPayloadXML(response); 
       ]]></script> 

詳細なエラーが

ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an error executing the inlined js script function mediate {org.apache.synapse.mediators.bsf.ScriptMediator} 
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: TypeError: Cannot read property "length" from undefined (<Unknown Source>#4) in <Unknown Source> at line number 4 
    at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68) 
    at javax.script.CompiledScript.eval(CompiledScript.java:92) 
    at org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(ScriptMediator.java:333) 
    at org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:265) 
    at org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:233) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 
    at org.apache.synapse.mediators.eip.splitter.IterateMediator.mediate(IterateMediator.java:256) 
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:267) 
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:766) 
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:282) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554) 
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:261) 
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:748) 
+0

jsonの外観はどのようなものですか?スクリプトメディエーターの直前にログをいっぱい入れ、それが期待されているのを見ますか? – Bee

答えて

0

results = payload.Results;代わりのresults = payload.results;

問題が解決しない場合は、これを試してみてください。

var jsonData = JSON.parse(payload) 
results = jsonData.Results; 
+0

はい試してみてください= payload.Results;それは働いた...答えBhathiyaのおかげで – Nita

0

まあですが、エラーはかなり間違っているかを表示します。このラインで:

for (i = 0; i < results.length; ++i) { 

変数resultsは未定義です。

これは、mc.getPayloadJSON()への呼び出しが失敗したか、返された結果が期待していなかった形式になることを強く示唆しています。そこからデバッグを試みてください。

+0

jsonペイロードを確認しました。有効です。今、mc.getPayloadJSON()が返すものを確認するにはどうすればいいですか? – Nita

+0

メソッド呼び出しの直後にブレークポイントを設定し、変数 'results'の内容を検査します。 – PMV

+0

これは.javaコードではありません。それは.xmlファイルなので、私はそれをデバッグすることができません。 – Nita

関連する問題