I tried to convert my list of list aggregate response into single list. I tried with js script mediator. but its not support, since i have very big data lists.
this is my iterate and aggregate function.
<iterate id="iterate-over-users" expression="json-eval($.pages)">
<target sequence="backendcall-seqence" />
</iterate>
<aggregate id="iterate-over-users">
<completeCondition>
<messageCount min="-1" max="-1" />
</completeCondition>
<onComplete expression="json-eval($.rawData)" sequence="out-sequence">
<respond />
</onComplete>
</aggregate>
my out-sequence is,
<script language="js">
<![CDATA[
data = JSON.parse(mc.getProperty("data"))
res = [];
data = mc.getPayloadJSON();
for (i = 0; i < data.length; i++) {
res=res.concat(data[i]);
}
mc.setPayloadJSON(res);
]]>
</script>
<property expression="json-eval($.)" name="data" scope="default" />
when data lis is very big it will throw and array from js function.
ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an Exception executing the external js script : null function mediate java.lang.IllegalArgumentException: out of range index
at org.mozilla.classfile.ClassFileWriter.add(ClassFileWriter.java:579)
at org.mozilla.classfile.ClassFileWriter.addLoadConstant(ClassFileWriter.java:647)
at org.mozilla.classfile.ClassFileWriter.addPush(ClassFileWriter.java:884)
at org.mozilla.javascript.optimizer.Codegen.emitConstantDudeInitializers(Codegen.java:1038)
at org.mozilla.javascript.optimizer.Codegen.generateCode(Codegen.java:321)
at org.mozilla.javascript.optimizer.Codegen.compileToClassFile(Codegen.java:166)
at org.mozilla.javascript.optimizer.Codegen.compile(Codegen.java:75)
at org.mozilla.javascript.Context.compileImpl(Context.java:2377)
at org.mozilla.javascript.Context.compileReader(Context.java:1296)
at org.mozilla.javascript.Context.compileReader(Context.java:1268)
at org.mozilla.javascript.Context.evaluateReader(Context.java:1107)
at com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:172)
at com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:198)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at org.apache.synapse.mediators.bsf.ScriptMediator.processJSONPayload(ScriptMediator.java:417)
at org.apache.synapse.mediators.bsf.ScriptMediator.mediateForInlineScript(ScriptMediator.java:389)
at org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:290)
at org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:258)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.completeAggregate(AggregateMediator.java:512)
at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.mediate(AggregateMediator.java:351)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:194)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:267)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:807)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:305)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:578)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:195)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:284)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
my backend response is something like,
{
"a":"a",
"b":"b",
"rawData":[
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}
]
}
after aggregate my responce issomthing like,
[
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}],
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}],
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}]
]
but i need response is,
[
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}]
please anyone can help me.