Javascript 获取错误';无法读取属性";“长度”;来自未定义的';脚本内中介esb wso2

Javascript 获取错误';无法读取属性";“长度”;来自未定义的';脚本内中介esb wso2,javascript,arrays,wso2,esb,mediator,Javascript,Arrays,Wso2,Esb,Mediator,当我在esb wso2中使用脚本中介器编写将json数组转换为xml数组的代码时,我遇到了错误“无法从未定义中读取属性”长度”。请帮忙。 我的脚本中介代码是 <script language="js"><![CDATA[ payload = mc.getPayloadJSON(); results = payload.results; var response = <locations/>; for (i

当我在esb wso2中使用脚本中介器编写将json数组转换为xml数组的代码时,我遇到了错误“无法从未定义中读取属性”长度”。请帮忙。 我的脚本中介代码是

<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>
;
对于(i=0;i
详细错误是

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)
ERROR{org.apache.synapse.mediators.bsf.ScriptMediator}-脚本引擎在执行内联js脚本函数mediate{org.apache.synapse.mediators.bsf.ScriptMediator}时返回错误
com.sun.phobos.script.util.ExtendedScriptException:org.mozilla.javascript.EcmaError:TypeError:无法从第4行的未定义(#4)中读取属性“length”
位于com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68)
位于javax.script.CompiledScript.eval(CompiledScript.java:92)
位于org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(ScriptMediator.java:333)
位于org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:265)
位于org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:233)
位于org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
位于org.apache.synapse.mediators.eip.splitter.IterateMediator.mediate(IterateMediator.java:256)
位于org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:267)
位于org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:766)
位于org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:282)
位于org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554)
位于org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188)
在org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)上
位于org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:261)
位于org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:748)

嗯,这个错误几乎可以告诉你出了什么问题。在这一行:

for (i = 0; i < results.length; ++i) {
for(i=0;i
变量
results
未定义


这强烈表明您对
mc.getPayloadJSON()
的调用失败,或者它以您不期望的格式返回了结果。请尝试从此处进行调试。

好的,错误基本上会告诉您出了什么问题。在这一行:

for (i = 0; i < results.length; ++i) {
for(i=0;i
变量
results
未定义


这强烈表明您对
mc.getPayloadJSON()
的调用失败,或者它以您不期望的格式返回了结果。请尝试从此处进行调试。

尝试
results=payload.results;
而不是
results=payload.results;

如果这不起作用,试试这个

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

尝试
results=payload.results;
而不是
results=payload.results;

如果这不起作用,试试这个

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

我已经验证了json负载,它是有效的正在返回?在方法调用后立即设置断点,并检查变量
results
的内容。这不是.java代码,而是.xml文件,因此我无法调试它。我已经验证了json有效负载,它是有效的。现在我如何验证mc.getPayloadJSON()的内容正在返回?在方法调用后立即设置一个断点,并检查变量
results
的内容。这不是.java代码。它是.xml文件,因此我无法调试它。您的json是什么样子的?在脚本中介器之前放置一个完整的日志,看看它是预期的吗?您的json是什么样子的?将一个完整的日志放在b之前在编写脚本mediator之前,看看它是否是预期的?是的,尝试结果=有效载荷。结果;它工作了…感谢您的回答Bhathiya是的,尝试结果=有效载荷。结果;它工作了…感谢您的回答Bhathiya