Enrich Mediatior throwing json malformed Error - wso2
Enrich mediator in WSO2 always fails with a json malformed expection from the JSONUtil class of synapse-commons
JSON : {"Topic":"demo","MessageKey":"demo","Header":{"continuum.message.dc.timestamp":["2020-08-06 00:10:14.866313839 +0000 UTC"],"continuum.message.transaction.id":["34ee58ae-288b-4338-bcbc-8971beadebbb"],"continuum.message.source":["demo"],"continuum.message.target":["demo"]},"Message":[{"backupServerName":"","billableSpace":"","client":{"id":1},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0},{"backupServerName":"","billableSpace":"","client":{"id":123},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0},{"backupServerName":"","billableSpace":"","client":{"id":123},"cpuSpeed":"","deviceID":"123","deviceName":"MSMA","deviceType":"backups","failedBackupCount":0,"friendlyName":"Ubuntu Server","installationDate":null,"ipAddress":"","isActive":false,"lastSuccessfulBackup":"2018-12-05T05:59:28.83Z","localHardDrives":"","manufacturer":"","modelNumber":"","numberOfProcessors":0,"osName":"","osVersion":"","partnerID":123,"physicalMemory":"","protectedDeviceName":"","psaRoleType":"","purchaseDate":null,"serialNumber":"","successfulBackupCount":0}]}
Enrich Code in Sequence:
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<enrich>
<source clone="false" property="OriginalMessage" type="property"/>
<target type="body"/>
</enrich>
Stack Trace:[2020-08-06 20:12:56,974] [-1234] [] [Thread-35] ERROR {org.apache.synapse.mediators.filters.FilterMediator} - Existing json payload is malformed. MessageID : ID:RMM-LT-998-65522-1596608596560-4:9:1:1:3 org.apache.synapse.commons.SynapseCommonsException: Existing json payload is malformed. MessageID : ID:RMM-LT-998-65522-1596608596560-4:9:1:1:3 at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:701) at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:675) at org.apache.synapse.commons.json.JsonUtil.getNewJsonPayload(JsonUtil.java:787) at org.apache.synapse.mediators.elementary.Target.insertJson(Target.java:399) at org.apache.synapse.mediators.elementary.EnrichMediator.mediate(EnrichMediator.java:148) 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.filters.FilterMediator.mediate(FilterMediator.java:169) 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.base.SequenceMediator.mediate(SequenceMediator.java:214) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37) at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69) at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134) 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.base.SequenceMediator.mediate(SequenceMediator.java:214) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71) at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37) at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69) at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134) 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.core.axis2.Axis2SynapseEnvironment.injectInbound(Axis2SynapseEnvironment.java:467) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSInjectHandler.invoke(JMSInjectHandler.java:255) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSPollingConsumer.poll(JMSPollingConsumer.java:297) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSPollingConsumer.execute(JMSPollingConsumer.java:204) at org.wso2.carbon.inbound.endpoint.protocol.jms.JMSTask.taskExecute(JMSTask.java:47) at org.wso2.carbon.inbound.endpoint.common.InboundRunner.run(InboundRunner.java:108) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getDirectReader(OMSourcedElementImpl.java:224) at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.forceExpand(OMSourcedElementImpl.java:253) at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getChildren(OMSourcedElementImpl.java:862) at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:458) at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:466) at org.apache.synapse.commons.json.JsonUtil.removeIndentations(JsonUtil.java:466) at org.apache.synapse.commons.json.JsonUtil.removeChildrenFromPayloadBody(JsonUtil.java:696) ... 35 more
I have used the following proxy service to try and reproduce the issue that you have observed. Here I am sending the JSON payload you have attached in the description to the proxy service. The JSON payload is then stored in the property OriginalMessage. Then a backend is invoked. After invoking the backend using the enrich mediator the original payload is then enriched to the body.
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="sampleProxy"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="http,https">
<target>
<inSequence>
<log>
<property expression="json-eval($)" name="OriginalMessage"/>
</log>
<property expression="json-eval($)" name="OriginalMessage"/>
<call>
<endpoint>
<address uri="http://localhost:8280/services/file_upload"/>
</endpoint>
</call>
<log level="full"/>
<property name="messageType"
scope="axis2"
type="STRING"
value="application/json"/>
<enrich>
<source clone="false" property="OriginalMessage" type="property"/>
<target type="body"/>
</enrich>
<respond/>
</inSequence>
</target>
<description/>
</proxy>
Here I could not observe any issue with this mediation. This was working as expected.
What is the EI version that you are using?
How did you store the JSON payload to the property mediator?
Related
WSO2 DataMapper Error converting XML to SOAP
I've to convert my backend soap response to json. For this i use a datamapper XML to JSON. The datamapper failed at runtime with this error: [2019-11-01 14:58:29,805] [micro-integrator] ERROR - DataMapperMediator DataMapper mediator : mapping failed Error while parsing XML input stream. Current context not Object but root at org.wso2.carbon.mediator.datamapper.engine.input.readers.XMLInputReader.read(XMLInputReader.java:124) at org.wso2.carbon.mediator.datamapper.engine.input.InputBuilder.buildInputModel(InputBuilder.java:59) at org.wso2.carbon.mediator.datamapper.engine.core.mapper.MappingHandler.doMap(MappingHandler.java:90) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.transform(DataMapperMediator.java:390) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.mediate(DataMapperMediator.java:301) 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.rest.Resource.process(Resource.java:363) at org.apache.synapse.rest.API.process(API.java:370) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:58) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:325) 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:265) 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) [2019-11-01 14:58:29,807] [micro-integrator] ERROR - AgendaRestApi DataMapper mediator : mapping failed Error while parsing XML input stream. Current context not Object but root at org.wso2.carbon.mediator.datamapper.engine.input.readers.XMLInputReader.read(XMLInputReader.java:124) at org.wso2.carbon.mediator.datamapper.engine.input.InputBuilder.buildInputModel(InputBuilder.java:59) at org.wso2.carbon.mediator.datamapper.engine.core.mapper.MappingHandler.doMap(MappingHandler.java:90) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.transform(DataMapperMediator.java:390) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.mediate(DataMapperMediator.java:301) 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.rest.Resource.process(Resource.java:363) at org.apache.synapse.rest.API.process(API.java:370) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:58) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:325) 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:265) 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) The input and output sample files used to configure the datamapper are: INPUT <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <GetSpecialtiesResponse xmlns="http://agenda/"> <GetSpecialtiesResult xmlns:a="http://schemas.datacontract.org/2004/07/WsAgenda.DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:Specialty> <a:code>cardiology</a:code> <a:name>Cardiologie</a:name> </a:Specialty> <a:Specialty> <a:code>neurology</a:code> <a:name>Neurologie</a:name> </a:Specialty> </GetSpecialtiesResult> </GetSpecialtiesResponse> </s:Body> </s:Envelope> OUTPUT: {"Specialties": [ { "id": "cardiology", "description": "Cardiologie" }, { "id": "cardiology", "description": "Cardiologie" } ]} In the datamapper designer all seems to working fine. Here is the sequence code: <?xml version="1.0" encoding="UTF-8"?> <api context="/agenda" name="AgendaRestApi" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET" url-mapping="/specialties"> <inSequence> <log/> <payloadFactory description="" media-type="xml"> <format> <soapenv:Envelope xmlns:agen="http://agenda/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <agen:GetSpecialties/> </soapenv:Body> </soapenv:Envelope> </format> <args/> </payloadFactory> <header name="soapAction" scope="transport" value="http://agenda/agenda/GetSpecialties"/> <send> <endpoint key="AgendaEP"/> </send> </inSequence> <outSequence> <datamapper config="gov:datamapper/GetSpecialtiesMapping.dmc" inputSchema="gov:datamapper/GetSpecialtiesMapping_inputSchema.json" inputType="XML" outputSchema="gov:datamapper/GetSpecialtiesMapping_outputSchema.json" outputType="JSON" xsltStyleSheet="gov:datamapper/GetSpecialtiesMapping_xsltStyleSheet.xml"/> <property name="messageType" scope="axis2" type="STRING" value="application/json"/> <respond/> </outSequence> <faultSequence> <log level="full"/> </faultSequence> </resource> </api> All possible solutions are welcome :)
I had the same problem and solved adding this property before the datamapper mediator. <property name="messageType" scope="axis2" type="STRING" value="text/xml"/> <datamapper config="gov:datamapper/GetSpecialtiesMapping.dmc" inputSchema="gov:datamapper/GetSpecialtiesMapping_inputSchema.json" inputType="XML" outputSchema="gov:datamapper/GetSpecialtiesMapping_outputSchema.json" outputType="JSON" xsltStyleSheet="gov:datamapper/GetSpecialtiesMapping_xsltStyleSheet.xml"/> Hope this helps, JP
WSO2 EI - SalesForce Connector not connecting to partial instance
Getting the below errors when I am trying to connect to Salesforce, Anything essential am I missing? //TID[-1234] [EI] [2019-03-19 20:40:40,174] ERROR {org.apache.axis2.description.ClientUtils} - The system cannot infer the transport information from the /services/createSFBuzz URL. //TID[-1234] [EI] [2019-03-19 20:40:40,174] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:86) org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:116) org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:603) org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:85) org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:547) org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:120) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70) org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:224) org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:337) org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:383) org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151) 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) java.lang.Thread.run(Thread.java:745) My Proxy Code: <?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="createSFBuzz" startOnLoad="true" statistics="disable" trace="disable" transports="http,https"> <target> <inSequence> <property expression="json-eval($.accessToken)" name="accessToken"/> <property expression="json-eval($.apiUrl)" name="apiUrl"/> <property expression="json-eval($.clientId)" name="clientId"/> <property expression="json-eval($.refreshToken)" name="refreshToken"/> <property expression="json-eval($.clientSecret)" name="clientSecret"/> <property expression="json-eval($.hostName)" name="hostName"/> <property expression="json-eval($.apiVersion)" name="apiVersion"/> <property expression="json-eval($.registryPath)" name="registryPath"/> <property expression="json-eval($.intervalTime)" name="intervalTime"/> <salesforcerest.init> <accessToken>{$ctx:accessToken}</accessToken> <apiUrl>{$ctx:apiUrl}</apiUrl> <apiVersion>{$ctx:apiVersion}</apiVersion> <hostName>{$ctx:hostName}</hostName> <clientSecret>{$ctx:clientSecret}</clientSecret> <clientId>{$ctx:clientId}</clientId> <refreshToken>{$ctx:refreshToken}</refreshToken> <registryPath>{$ctx:registryPath}</registryPath> <intervalTime>{$ctx:intervalTime}</intervalTime> </salesforcerest.init> <log level="full" separator=","/> <send/> </inSequence> <outSequence> <payloadFactory media-type="json"> <format>{"success":"Connection Successful"}</format> <args/> </payloadFactory> <respond/> </outSequence> </target> <description/> </proxy>
The problem is not in the salesforce connector, but in the send mediator afterwards. It has no idea where to send anything. You have a send mediator without a defined endpoint, and most likely without a To header that points to a valid endpoint. What are you trying to achieve with the Send mediator?
wso2 data mapper SequenceMediator Runtime error
I am trying to use the data mapper to map the response from two(2) different api. So what I did was use the clone mediator and aggregate mediator to merge these two api together and then map it using the data mapper but when I get on the data mapper part I always get an error. It works if I removed the data mapper mediator part. Here's my api <?xml version="1.0" encoding="UTF-8"?> <api context="/test" name="test" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET"> <inSequence> <property name="ROOT" scope="default"> <root:movie xmlns:root="www.wso2esb.com"/> </property> <log level="full"/> <clone continueParent="true" id="movie" sequential="true"> <target> <sequence> <send> <endpoint> <address format="rest" uri="https://api.themoviedb.org/3/movie/tt0918940?api_key=code"/> </endpoint> </send> </sequence> </target> <target> <sequence> <send> <endpoint> <address format="rest" uri="https://www.omdbapi.com/?type=movie&i=tt0918940"/> </endpoint> </send> </sequence> </target> </clone> </inSequence> <outSequence> <aggregate id="movie"> <completeCondition> <messageCount max="-1" min="-1"/> </completeCondition> <onComplete enclosingElementProperty="ROOT" expression="//jsonObject/*" xmlns:dummy="http://org.dummy" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <datamapper config="gov:datamapper/TestMapping.dmc" inputSchema="gov:datamapper/TestMapping_inputSchema.json" inputType="JSON" outputSchema="gov:datamapper/TestMapping_outputSchema.json" outputType="JSON"/> <property name="messageType" scope="axis2" type="STRING" value="application/json"/> <respond/> </onComplete> </aggregate> </outSequence> </resource> </api> and here's my log [2016-07-21 09:33:56,180] ERROR - SequenceMediator Runtime error occurred while mediating the message java.lang.NullPointerException at java.io.Reader.<init>(Reader.java:78) at java.io.InputStreamReader.<init>(InputStreamReader.java:72) at org.wso2.carbon.mediator.datamapper.engine.input.readers.JSONInputReader.readFromInputStream(JSONInputReader.java:76) at org.wso2.carbon.mediator.datamapper.engine.input.readers.JSONInputReader.read(JSONInputReader.java:59) at org.wso2.carbon.mediator.datamapper.engine.input.InputBuilder.buildInputModel(InputBuilder.java:59) at org.wso2.carbon.mediator.datamapper.engine.core.mapper.MappingHandler.doMap(MappingHandler.java:67) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.transform(DataMapperMediator.java:306) at org.wso2.carbon.mediator.datamapper.DataMapperMediator.mediate(DataMapperMediator.java:256) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:95) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:57) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.completeAggregate(AggregateMediator.java:447) at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.mediate(AggregateMediator.java:330) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:95) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:57) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) at org.apache.synapse.rest.Resource.process(Resource.java:325) at org.apache.synapse.rest.API.process(API.java:338) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:125) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:56) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:300) 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:255) 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:745)
Please check your governance registry whether you add configuration correctly into ESB. (Navigate to Governance registry) You will get null pointer exception as it can't find relevant details. Please add relevant configurations and test.
wso2 cloning from two different api
I am trying to clone 2 different api to combine their response but i am always getting a null pointer error. at first i am just trying to clone these 2 api. <?xml version="1.0" encoding="UTF-8"?> <api context="/movieapi" name="movieapi" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET" uri-template="/movie/{imdbId}"> <inSequence> <property expression="get-property('uri.var.imdbId')" name="uri.var.imdbId" scope="default" type="STRING"/> <clone> <target> <endpoint> <address trace="disable" uri="https://api.themoviedb.org/3/movie/{uri.var.imdbId}?api_key=code&append_to_response=casts,images"/> </endpoint> </target> <target> <endpoint> <address trace="disable" uri="http://www.omdbapi.com/?type=movie&i={uri.var.imdbId}"/> </endpoint> </target> </clone> </inSequence> </resource> </api> Here is my error from wso2esb version 5 beta [2016-07-15 13:57:34,106] ERROR - PassThroughHttpSender Failed to submit the response java.lang.NullPointerException at org.apache.synapse.transport.passthru.util.SourceResponseFactory.create(SourceResponseFactory.java:67) at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:463) at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212) at org.apache.synapse.rest.Resource.process(Resource.java:348) at org.apache.synapse.rest.API.process(API.java:336) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:120) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:100) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:55) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:541) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:179) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:252) 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:745) [2016-07-15 13:57:34,121] ERROR - Axis2Sender Access-Control-Allow-Origin:*,Cache-Control:public, max-age=28800,Content-Type:application/json;charset=utf-8,ETag:"37a6259cc0c1dae299a7866489dff0bd",Status:404 Not Found,X-Memc:MISS,X-Memc-Age:0,X-Memc-Expires:28800,X-Memc-Key:d0c5ca8e07e81f5246e96c9e4bd54753,X-RateLimit-Limit:40,X-RateLimit-Remaining:39,X-RateLimit-Reset:1468562263,<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back org.apache.axis2.AxisFault: Failed to submit the response at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:613) at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:266) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:212) at org.apache.synapse.rest.Resource.process(Resource.java:348) at org.apache.synapse.rest.API.process(API.java:336) at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:120) at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:100) at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:55) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:541) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:179) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:252) 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:745) Caused by: java.lang.NullPointerException at org.apache.synapse.transport.passthru.util.SourceResponseFactory.create(SourceResponseFactory.java:67) at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:463) at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:264) ... 16 more [2016-07-15 13:57:34,124] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:f814f333-463b-4f51-89f1-2c361d7c55ae, Direction: response, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Access-Control-Allow-Origin:*,Cache-Control:public, max-age=28800,Content-Type:application/json;charset=utf-8,ETag:"37a6259cc0c1dae299a7866489dff0bd",Status:404 Not Found,X-Memc:MISS,X-Memc-Age:0,X-Memc-Expires:28800,X-Memc-Key:d0c5ca8e07e81f5246e96c9e4bd54753,X-RateLimit-Limit:40,X-RateLimit-Remaining:39,X-RateLimit-Reset:1468562263,<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body/></soapenv:Envelope> Unexpected error sending message back, Payload: {"status_code":34,"status_message":"The resource you requested could not be found."}
Please check whether your property retrieve value from the property. For that use log mediator as follows; <log level="full"> <property expression="get-property('uri.var.imdbId')" name="uri.var.imdbId" scope="default" type="STRING"/> </log> Then the issue is retrieving part. Issue is about submitting response. According to your configuration, you didn't add aggregate mediator to gather responses [1]. Please add and test it. I add sample scenario here. You just have to start 2 instances of SimpleStockQuote service [2] and publish messages to proxy via SOAPUI. <proxy name="ScatterGatherProxy" startOnLoad="true" trace="disable" transports="https http"> <description/> <target> <inSequence> <clone> <target> <sequence> <send> <endpoint name="vendorA"> <address uri="http://localhost:9001/services/SimpleStockQuoteService/"/> </endpoint> </send> </sequence> </target> <target> <sequence> <send> <endpoint name="vendorB"> <address uri="http://localhost:9002/services/SimpleStockQuoteService/"/> </endpoint> </send> </sequence> </target> </clone> </inSequence> <outSequence> <log level="full"/> <aggregate> <completeCondition> <messageCount min="2"/> </completeCondition> <onComplete expression="//m0:return" xmlns:m0="http://services.samples" xmlns:m1="http://services.samples/xsd"> <enrich> <source clone="true" xpath="//m0:return[not(preceding-sibling::m0:return/m1:last <= m1:last) and not(following-sibling::m0:return/m1:last < m1:last)]"/> <target type="body"/> </enrich> <send/> </onComplete> </aggregate> </outSequence> </target> [1] https://docs.wso2.com/display/ESB490/Aggregate+Mediator [2] https://docs.wso2.com/display/ESB490/Setting+Up+the+ESB+Samples#Starting%20the%20Axis2%20server
Can't parse JSON response in the OutSequence wso2 esb?
At the start of the Outsequence I am using this: <property name="messageType" value="application/JSON" scope="axis2"/> but still I get the error message Content not allowed in prolog. If I directly send the response to the client without using any mediators I don't get any error. Below is the full stack trace: [2015-07-07 12:11:35,747] ERROR - RelayUtils Error while building Passthrough stream org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Message: Content is not allowed in prolog. at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204) at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154) at org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73) at org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79) at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196) at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:55) at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:138) at org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:107) at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:82) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:68) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:268) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
I am able to parse JSON response. WSO2 ESB version used- 4.8.1 Below is the proxy code. <?xml version="1.0" encoding="UTF-8"?><proxy xmlns="http://ws.apache.org/ns/synapse" name="JsonProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> <target> <inSequence> <log level="full"> <property name="################ REQUEST ###################" expression="$body"/> </log> <send> <endpoint> <address uri="http://ip.jsontest.com/"/> </endpoint> </send> </inSequence> <outSequence> <property name="messageType" value="application/json" scope="axis2" type="STRING"/> <log level="full"> <property name="################ RESPONSE###################" expression="$body"/> </log> <log> <property name="::::::::::::::::::::::::::::: JSON :::::::::::::::::::::::::::" expression="json-eval($.)"/> </log> <send/> </outSequence> </target> <description/> </proxy> Please cross check that below lines are only uncommented in axis2.xml <messageFormatter contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamFormatter"/> <messageFormatter contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/> <messageBuilder contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamBuilder"/> <messageBuilder contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>