Получение ошибки «Невозможно прочитать свойство« length »из неопределенного» в посреднике сценариев esb wso2

1

Когда я пишу код для преобразования json массива в массив xml в esb wso2 с помощью посредника сценария, я получаю сообщение об ошибке "Can not read property" length from undefined. Пожалуйста помоги. Мой код посредника скрипта

<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? Поставить журнал заполненным непосредственно перед посредником сценария и увидеть, что он ожидаемый?
Теги:
arrays
wso2
mediator
esb

2 ответа

0
Лучший ответ

Попробуйте results = payload.Results; вместо results = payload.results;

Если это не сработает, попробуйте это.

var jsonData = JSON.parse(payload)
results = jsonData.Results;
  • 0
    Да, пытаясь результаты = payload.Results; Это сработало ... спасибо за ответ Bhathiya
0

Ну, ошибка в значительной степени говорит вам, что неправильно. На этой строке:

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

Переменные results не определены.

Это настоятельно указывает на то, что ваш вызов mc.getPayloadJSON() неудачно или он вернул результаты в формате, которого вы не ожидали. Попробуйте отладить оттуда.

  • 0
    Я проверил полезную нагрузку JSON, она действительна. Теперь, как я могу проверить, что mc.getPayloadJSON () возвращает?
  • 0
    Установите точку останова сразу после вызова метода и проверьте содержимое переменной results .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню