I'm receiving JSON payload from customer, sometimes incoming payload value is lengthy and contains multiple special characters in some field eg (description).
Sample Payload:
{
"InstanceName":"clientDEV",
"Direction":"InBound",
"CustomerName":"client",
"CustomerID":"6642671519xxx",
"ObjectID":"c7cb6e97c399xxx",
"ObjectName":"SCTASK0010101",
"ObjectType":"Service Request",
"OperationName":"UpdateObject",
"ObjectData":{
"description":"From: , Lene Bjørhei <Lene.Bjoerhei@client.com> , Sent: 19 August 2022 10:49 AM, To: Helpdesk <helpdesk@client.com>, Cc: Christensen, Helge <helge.christensen@client.com>, Subject: Power BI, , Hi, , , I have two names in Power BI, where the one marked with red is wrong. , , On the same list, Hanne Topland don, t work in client anymore and has no claims attached to her in PBI, and Kine Haaland is not in our department and has no claims here either. , , Kind reclients, Lene Bjørhei , Team leader, P&I and Offshore Energy claims, client AS, o: +47 39 00 00 00 , m: +47 24 00 05 11, e: lene.bjoerhei@client.com",
"cmdb_ci":"",
"number":"SCTASK0010101",
"contact_type":"Email",
"state":"-5",
"sys_created_on":"2022-08-19 10:05:39",
"sys_created_by":"Maria@client.com",
"priority":"4",
"category":"inquiry",
"subcategory":"internal application",
"short_description":"Application - Power BI Claim handler names",
"assignment_group":"Cognizant ICT Services - Service Desk",
"caller":"Lene Bjørhei ",
"close_code":"",
"close_notes":"undefined",
"comments":"",
"work_notes":"Work notes: From: Christensen, Helge <helge.christensen@client.com>\n Sent: Monday, August 22, 2022 7:33 AM\n To: , Lene Bjørhei <Lene.Bjoerhei.@client.com>\n Cc: Helpdesk <helpdesk@client.com>\n Subject: FW: Power BI\n \n Good morning Lene,\n \n Your old and misspelled name has been removed from the data source, sorry for the inconvenience.\n \n Kr\n Helge\n \n \n \n Additional comments: ",
"u_queue":"",
"on_hold_reason":"Awaiting Customer IT SPOC"
}
}
API Code Snippet:
<property expression="json-eval($.text)" name="received_payload" scope="default" type="STRING"/>
<property expression="base64Decode(get-property('received_payload'))" name="decoded_payload" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<log level="custom">
<property expression="get-property('decoded_payload')" name="DATA:DecodedPayload" xmlns:ns="http://org.apache.synapse/xsd"/>
</log>
<script language="js"><![CDATA[var customer_payload = mc.getProperty("decoded_payload");
var myJSON = JSON.parse(customer_payload);
//remianing business flow
]]></script>
Facing String contains control character ERROR
in script mediator when some special character comes in the payload.
Log:
[2022-08-22 05:29:38,840] [-1234] [] [pool-58-thread-68583] ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an error executing the inlined js script function mediate
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: SyntaxError: String contains control character (<Unknown Source>#2) in <Unknown Source> at line number 2
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:394)
at org.apache.synapse.mediators.bsf.ScriptMediator.invokeScript(ScriptMediator.java:289)
at org.apache.synapse.mediators.bsf.ScriptMediator.mediate(ScriptMediator.java:257)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectInbound(Axis2SynapseEnvironment.java:445)
at org.wso2.carbon.inbound.amazonsqs.AmazonSQSPollingConsumer.injectMessage(AmazonSQSPollingConsumer.java:267)
at org.wso2.carbon.inbound.amazonsqs.AmazonSQSPollingConsumer.poll(AmazonSQSPollingConsumer.java:206)
at org.wso2.carbon.inbound.amazonsqs.AmazonSQSPollingConsumer.poll(AmazonSQSPollingConsumer.java:58)
at org.wso2.carbon.inbound.endpoint.protocol.generic.GenericTask.taskExecute(GenericTask.java:41)
at org.wso2.carbon.inbound.endpoint.common.InboundTask.execute(InboundTask.java:45)
at org.wso2.carbon.mediation.ntask.NTaskAdapter.execute(NTaskAdapter.java:98)
at org.wso2.carbon.ntask.core.impl.TaskQuartzJobAdapter.execute(TaskQuartzJobAdapter.java:67)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)
Caused by: org.mozilla.javascript.EcmaError: SyntaxError: String contains control character (<Unknown Source>#2)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
at org.mozilla.javascript.NativeJSON.parse(NativeJSON.java:112)
at org.mozilla.javascript.NativeJSON.execIdCall(NativeJSON.java:88)
at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97)
at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
at org.mozilla.javascript.gen._Unknown_Source__79771._c_script_0(<Unknown Source>:2)
at org.mozilla.javascript.gen._Unknown_Source__79771.call(<Unknown Source>)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
at org.mozilla.javascript.gen._Unknown_Source__79771.call(<Unknown Source>)
at org.mozilla.javascript.gen._Unknown_Source__79771.exec(<Unknown Source>)
at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:55)
... 21 more
Found this, But not sure this will help or not.
How to handle this ? is there any way to allow this characters in payload?