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 AMn To: , Lene Bjørhei <Lene.Bjoerhei.@client.com>n Cc: Helpdesk <helpdesk@client.com>n Subject: FW: Power BIn n Good morning Lene,n n Your old and misspelled name has been removed from the data source, sorry for the inconvenience.n n Krn Helgen 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?
Advertisement
Answer
I don’t think this has to do anything with the Payload. The error indicated that it detected control characters in your script. Also, I don’t see any control characters in the shared JSON payload. If your JSON is valid here it should work.
So double-check the content of your script, maybe you can start with something simple and try to expand. Also, instead of language="js"
try to use <script language="nashornJs">
instead.
If you really think the error is generated due to the payload, try to replace the control characters before parsing the string to a JSON. Something like below,
var customer_payload = mc.getProperty("decoded_payload"); customer_payload.replace(/[u0000-u001Fu007F-u009F]/g, "") var myJSON = JSON.parse(customer_payload);
Update
After looking at the full Stacktrace the error seems to be caused by the payload. It’s thrown somewhere here in the source. So replacing the control character should work.