Filter data from JSON by checking condition with two properties - WSO2 ESB - wso2-esb

Below is the JSON file:
{
"_id": "rezbase_v3",
"_rev": "3-096e751caeeda12a8c30e28075a95e97",
"exchangerate_data": [
{
"buyingrate": 0.274725274725275,
"sellingrate": 0.274725274725275,
"buyingrateinverse": 3.64,
"sellingrateinverse": 3.64,
"basecurrency": {
"currencyCode": "USD",
"currencyName": "US dollar"
},
"quotecurrency": {
"currencyCode": "QAR",
"currencyName": "Qatari riyal"
},
"updateddate": 1491182700431,
"basecurrencyname": "US dollar",
"quotecurrencyname": "Qatari riyal"
},
{
"buyingrate": 0.00681384573453257,
"sellingrate": 0.00681384573453257,
"buyingrateinverse": 146.76,
"sellingrateinverse": 146.76,
"basecurrency": {
"currencyCode": "USD",
"currencyName": "US dollar"
},
"quotecurrency": {
"currencyCode": "LKR",
"currencyName": "Sri Lankan rupee"
},
"updateddate": 1491182700431,
"basecurrencyname": "US dollar",
"quotecurrencyname": "Sri Lankan rupee"
}
]
}
And from the file I need to filter buyingrate where basecurrency/currencycode is USD and quotecurrency/currencycode is LKR.
I have tried below expression:
<property description="quote1" expression="//jsonObject/exchangerate_data[basecurrency/currencyCode='USD' and quotecurrency/currencyCode='LKR']/buyingrate/text()" name="quote1" scope="default" type="STRING"/>
And I could be able to get the buyingrate.
But when I make the values as properties and tried to get the buyingrate, It is logging the exact expression insstead of the value.
<property description="basecurrency" name="basecurrency" scope="default" type="STRING" value="USD"/>
<property description="quotecurrency" name="quotecurrency" scope="default" type="STRING" value="LKR"/>
<property name="apos" scope="default" type="STRING" value="'"/>
<property description="exchangeratePath" expression="fn:concat(get-property('exchangeratePath'),'//jsonObject/exchangerate_data[basecurrency/currencyCode=',get-property('apos'),get-property('basecurrency'),get-property('apos'),' and quotecurrency/currencyCode=',get-property('apos'),get-property('quotecurrency'),get-property('apos'),']/buyingrate/text()')" name="exchangeratePath" scope="default" type="STRING"/>
<log level="custom">
<property expression="get-property('exchangeratePath')" name="exchangeratePath"/>
</log>
Logged value:
[2018-04-27 08:50:41,314] INFO - LogMediator exchangeratePath = //jsonObject/exchangerate_data[basecurrency/currencyCode='USD' and quotecurrency/currencyCode='LKR']/buyingrate/text()
I have checked tried the way mentioned in this answer.

This is resolved by:
<property description="exchangeratePath" expression="fn:concat(get-property('exchangeratePath'),'//jsonObject/exchangerate_data[basecurrency/currencyCode=',get-property('apos'),get-property('basecurrency'),get-property('apos'),' and quotecurrency/currencyCode=',get-property('apos'),get-property('quotecurrency'),get-property('apos'),']/buyingrate/text()')" name="exchangeratePath" scope="default" type="STRING"/>
<property description="exchangeRate" expression="evaluate($ctx:exchangeratePath)" name="exchangeRate" scope="default" type="STRING"/>

Related

OnComplete in Aggregate sequence not triggered after the Iteration sequence

I'm building a microservice where I have a main sequence that first reads a json file and then goes into iteration sequence that is connected to an aggregator sequence with an ID. Here is the order from the main sequence:
<property expression="json-eval($)" name="ORIGINAL_PAYLOAD" scope="default" type="STRING"/>
<sequence key="data-iterate-seq"/>
<property name="aggregatedResponses" scope="default">
<batch_response/>
</property>
<sequence key="data-aggregate-seq"/>
The problem I'm facing is that once it goes into iterate it first triggers the code in aggregate that is outside of OnComplete, then it goes back and does the iterations and never goes to the OnComplete neither it goes back to the main sequence. I managed to make it continue with the main sequence using continueParent=true but this way it never goes into OnComplete of the aggregation sequence. I have also tried switching the onComplete expression to $body/*[1] and //jsonObject but it didn't work Edit: neither did the <send/> and <loopback/> operators.
Here is my iterator
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="data-iterate-seq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<iterate attachPath="json-eval($)" expression="json-eval($.records)" id="requestIterator" preservePayload="true">
<target>
<sequence>
<payloadFactory media-type="json">
<format>$1</format>
<args>
<arg evaluator="json" expression="$"/>
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<log level="custom" separator="
">
<property expression="json-eval($)" name="BODY_INSIDE_ITERATE"/>
</log>
<!-- Prepare Payload -->
<property expression="json-eval($.recordId)" name="recordId" scope="default" type="STRING"/>
<property name="entitySetName" scope="default" type="STRING" value="accounts"/>
<property expression="concat(get-property('msdynamics365.resource'),'/api/data/',get-property('msdynamics365.api.version'),'/')" name="patch-url" scope="axis2" type="STRING"/>
<payloadFactory media-type="json">
<format>{"batch_response": "{ "relativeUrlTemplate": "{{apiUrl}}{{entitySetName}}{{entityRecordId}}",
"method": "PATCH",
"entitySetName": "$1",
"entityRecordId": "$2",
"data": {
"name":"$3",
"email":"$4"
}
}}
</format>
<args>
<arg evaluator="xml" expression="$ctx:entitySetName"/>
<arg evaluator="xml" expression="$ctx:recordId"/>
<arg evaluator="json" expression="$.data.name"/>
<arg evaluator="json" expression="$.data.emailaddress1"/>
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<log level="full"/>
<log level="custom" separator="
">
<property name="Results" value="Number of iterations"/>
</log>
</sequence>
</target>
</iterate>
</sequence>
and my aggregator:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="data-aggregate-seq" onError="data-fault-seq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<aggregate id="requestIterator">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete aggregateElementType="root" enclosingElementProperty="aggregatedResponses" expression="json-eval($)" xmlns:ns="http://org.apache.synapse/xsd">
<property expression="json-eval($)" name="aggregatedResponses" scope="default" type="STRING"/>
<log level="full">
<property expression="json-eval($)" name="OUT_SEQUENCE_AGGREGATED_RESPONSE"/>
</log>
<log level="full">
<property expression="get-property('aggregatedResponses')" name="Responses"/>
</log>
</onComplete>
</aggregate>
<log level="custom">
<property expression="json-eval($)" name="FINAL_PAYLOAD"/>
<property expression="get-property('aggregatedResponses')" name="aggregated_Response"/>
</log>
</sequence>
Any suggestions on what I'm doing wrong or anything that might help would be really appreciated!
Thank you in advance!!
According to the documentation, you need to use a call or send mediator inside the Iterate mediator to continue the message flow.
In Iterate you need to send the split messages to an endpoint to
continue the message flow.
For me, it seems you are only transforming the message payload. Hence you can use Foreach mediator to do that without Iterate mediator.

salesforcerest.update not working in WSO2 EI 6.1.1

I am doing Salesforce update operation using Salesforce Rest connector in wso2 ei. problem here is record not updated, it shows below exception after forming request payload.
Exception:
|**TID: [-1234] [] [2019-12-06 05:03:05,191] ERROR {org.apache.synapse.commons.json.JsonUtil} - #getNewJsonPayload. Could not save JSON payload. Invalid input stream found. MessageID: urn:uuid:33275d28-c55d-4a9e-bbcd-17d60cc38d1e {org.apache.synapse.commons.json.JsonUtil}
TID: [-1234] [] [2019-12-06 05:03:05,192] ERROR {org.apache.synapse.mediators.transform.PayloadFactoryMediator} - Error creating JSON Payload from source Lead {org.apache.synapse.mediators.transform.PayloadFactoryMediator}**
Code Snippet:
<api xmlns="http://ws.apache.org/ns/synapse" name="TestImageAPI" context="/imageapi">
<resource methods="GET" protocol="http https">
<inSequence>
<log level="custom" separator=",**, " description="FaultSequence">
<property name="=====TestImageAPI=====" value="called===="/>
</log>
<property name="ValuationId" value="00Q5500000AGHikEAH" scope="default" type="STRING"/>
<property name="First_Image_Name__c" value="cbimage" scope="default" type="STRING"/>
<property name="ObjectName" value="Lead" scope="default" type="STRING"/>
<payloadFactory media-type="json" description="Form Response Payload">
<format>{"Lead_Type__c":"$1"}</format>
<args>
<arg value="Phone"/>
</args>
</payloadFactory>
<property name="fieldAndValue" expression="json-eval($.)" scope="default" type="STRING"/>
<log level="custom">
<property name="===FirstImagepayload=====" expression="$ctx:fieldAndValue"/>
</log>
<sequence key="QRSag_VBSalesforceInitializer" description="Load Configurations"/>
<salesforcerest.init>
<accessToken>{$ctx:accessToken}</accessToken>
<apiVersion>{$ctx:apiVersion}</apiVersion>
<hostName>{$ctx:hostName}</hostName>
<refreshToken>{$ctx:refreshToken}</refreshToken>
<clientSecret>{$ctx:clientSecret}</clientSecret>
<clientId>{$ctx:clientId}</clientId>
<apiUrl>{$ctx:apiUrl}</apiUrl>
<registryPath>{$ctx:registryPath}</registryPath>
<intervalTime>{$ctx:intervalTime}</intervalTime>
</salesforcerest.init>
<property name="SalesforceAccessToken" expression="json-eval($.access_token)" scope="default" type="STRING"/>
<log level="full"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Bearer ', get-property('SalesforceAccessToken'))" scope="transport" type="STRING" description="Authorization"/>
<salesforcerest.update>
<sObjectName>{$ctx:ObjectName}</sObjectName>
<Id>{$ctx:ValuationId}</Id>
<fieldAndValue>{$ctx:fieldAndValue}</fieldAndValue>
</salesforcerest.update>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
Note: Added Salesforce Rest connector in both server as well as ESB Project
Could anyone please give me a solution??
I have achieved the above mentioned use case. FYI,
<property description="Authorization" expression="fn:concat('Bearer ', get-property('SalesforceAccessToken'))" name="Authorization" scope="transport" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<payloadFactory description="Form Response Payload" media-type="json">
<format>{"First_Image_Name__c":"$1"}</format>
<args>
<arg evaluator="xml" expression="$ctx:First_Image_Name__c"/>
</args>
</payloadFactory>
<log level="custom">
<property expression="json-eval($.)" name="===FirstImagepayload====="/>
</log>
<property expression="json-eval($.)" name="fieldAndValue" scope="default" type="STRING"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property name="OUT_ONLY" scope="default" type="STRING" value="false"/>
<property expression="fn:concat($ctx:instance_url,'/services/data/v47.0/sobjects/Product2/',$ctx:StockID)" name="uri.var.ImageUpload" scope="default" type="STRING"/>
<property description="Authorization" expression="fn:concat('Bearer ', get-property('SalesforceAccessToken'))" name="Authorization" scope="transport" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<log level="custom">
<property expression="$ctx:uri.var.ImageUpload" name="===SalesforceLink========="/>
</log>
<call description="ImageuploadEndpoint">
<endpoint>
<http method="patch" uri-template="{uri.var.ImageUpload}"/>
</endpoint>
</call>
<log level="full" separator="=== First Image Name Update Response ==="/>

WSO2 api context growing too big

I have a situation where my api file sizes keeps growing as I keep adding more and more switch mediator cases... what's the best way to split and organize them in wso2. Below is a sample example of one of the files...
The problem is the cases are growing, and the file size is becoming too large.
Sometimes one of the 'CASE' can be like 100 lines! Here in the example, I'm obfuscating by using (...) of course.
I would appreciate any help. Ideally there is a way how we can chunk this into smaller file sizes. It's surprisingly hard to find after googling. I'm pretty sure I'm not the first person to run into this.
Also you can see here that function fixDate(given_time) is being repeated in this file, what's the best way to include this function once and use it throughout the file.
Thanks for any insights!
The file is \synapse-config\api\Applications.xml ... and it's growing in size...
<?xml version="1.0" encoding="UTF-8"?>
<api context="/applications" name="Applications" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
....
...
...
<property expression="$url:page" name="uri.var.page" scope="default" type="STRING"/>
<script language="js"><![CDATA[
...
></script>
<payloadFactory description="PayloadFactory" media-type="json">
<format>
$1
</format>
<args>
<arg evaluator="xml" expression="get-property('uri.var.ats_credentials')"/>
</args>
</payloadFactory>
<property expression="json-eval($.auth_code)" name="uri.var.auth_code" scope="default" type="STRING"/>
<log level="full">
</log>
<switch source="get-property('uri.var.ats_type')">
<case regex="CASE 1">
<payloadFactory media-type="json">
<format>{
"filters": [
{
"name": "applicantworkflow.updateddate",
"value": [
"$1"
],
"secondaryValue": [
"$2"
]
},
{
"name":
"applicantworkflow.id",
"value": [
"$3"
],
"operator": ">"
}
]
.......
<case regex="CASE 2">
<script language="js"><![CDATA[function fixDate(given_time) {
......
<case regex="CASE 3">
<script language="js"><![CDATA[function fixDate(given_time) {
......
<case regex="CASE 4">
<script language="js"><![CDATA[function fixDate(given_time) {
......
//FILE SIZE KEEPS GROWING..... with different cases......
<default>
<log description="Fault Log" level="custom">
<property expression="fn:concat('Invalid ATS - ', get-property('uri.var.ats_type'))" name="message"/>
</log>
<payloadFactory media-type="json">
<format>{
"Error": "Invalid ATS"
}
</format>
<args/>
</payloadFactory>
<respond description="Respond"/>
</default>
</switch>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence>
<send/>
</faultSequence>
</resource>
<handlers>
<handler class="com.tti.security.OpenSourceAuthHandler"/>
</handlers>
</api>
The easiest solution for this is to use separate sequences. Create a separate sequence for each case (or at least the ones that are getting really big). And from the switch mediator call the sequences using the sequence mediator.
First save the sequence in a sequence file that you add to your project:
<sequence name="case1_sequence" xmlns="http://ws.apache.org/ns/synapse">
<case regex="CASE 1">
<payloadFactory media-type="json">
<format>{
"filters": [
{
"name": "applicantworkflow.updateddate",
"value": [
"$1"
],
"secondaryValue": [
"$2"
]
},
{
"name":
"applicantworkflow.id",
"value": [
"$3"
],
"operator": ">"
}
]
..
</sequence>
Then use the sequence mediator inside your switch statement to call the sequences.
<switch source="get-property('uri.var.ats_type')">
<case regex="CASE 1">
<sequence key="case1_sequence"/>
</case>
..
</switch>

how to send response as String using class mediator in wso2 esb

In my project I created some proxy.There transport type is tcp.
My response is
{
"BillingSystem": {
"request_id": "20114140080000011479122000",
"request_timestamp": "12102012121200",
"response_timestamp": "12102012121300",
"action": "AddSubscription",
"username": "Cellcard ",
"result_code": "0",
"result_desc": "Success"
}
}
I catch this response using class mediator and create WZ2OCS2:1:14:14008:1:#1479122000# using that response. I need to send this string to tcp client. I set this String in the class meditor
context.setProperty("responseClientValue", responseClientValue);
After set this value in class mediator I used payload factory mediator and after that property mediator.
<payloadFactory description="" media-type="xml">
<format>
<name xmlns="">$1</name>
</format>
<args>
<arg evaluator="xml" expression="get-property('responseClientValue')"/>
</args>
</payloadFactory>
property mediator
<property name="messageType" scope="axis2" type="STRING" value="application/text"/>
When I run project Its show xml code
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><name>WZ2OCS2:1:14:14008:1:#1479122000#</name></soapenv:Body></soapenv:Envelope>?
Here is my proxy service
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="SurepayBillingErrorHandlingProxy" startOnLoad="true" transports="tcp" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<class description="" name="esb.cellcard.billing.SurepayMediator"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<send>
<endpoint key="SurpayBillingEP"/>
</send>
</inSequence>
<outSequence>
<class name="esb.cellcard.billing.ResponseRequestId"/>
<payloadFactory description="" media-type="xml">
<format>
<name xmlns="">$1</name>
</format>
<args>
<arg evaluator="xml" expression="get-property('responseClientValue')"/>
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="application/text"/>
<send/>
</outSequence>
<faultSequence/>
</target>
<parameter name="transport.tcp.responseClient">true</parameter>
<parameter name="transport.tcp.inputType">string</parameter>
<parameter name="transport.tcp.recordDelimiter">?</parameter>
<parameter name="transport.tcp.contentType">text/plain</parameter>
<parameter name="transport.tcp.port">6050</parameter>
<parameter name="transport.tcp.recordDelimiterType">character</parameter>
</proxy>
How can I get only string value. Thank you
Change your payloadFactory like this :
<payloadFactory>
<format>
<text xmlns="http://ws.apache.org/commons/ns/payload">$1</text>
</format>
<args>
<arg evaluator="xml" expression="$ctx:responseClientValue"/>
</payloadFactory>
Change property messageType like this :
<property name="messageType" scope="axis2" type="STRING" value="text/plain"/>
(see axis2.xml, by default, the PlainTextFormatter class is associated with text/plain : <messageFormatter contentType="text/plain" class="org.apache.axis2.format.PlainTextFormatter"/>)

Error in iterate mediator:Axis2Sender Unexpected error sending message back org.apache.axis2.AxisFault

I'm using wso2esb 4.7.0 and wso2dss 3.0.0.Here i have created a proxy service and wish to display a message using payload factory mediator.My configuration contain iterator mediator.I have to insert array of values in table and then display a message like Rows successfully inserted into database.My iteration configuration in insequence is like:
<iterate continueParent="true"
id="Readings"
expression="//ReadingsLiteTaildto">
<target>
<sequence>
<property name="userid" expression="get-property('userid')"/>
<property name="usergroupid" expression="get-property('usergroupid')"/>
<property name="slno" expression="//slno/text()"/>
<property name="type" expression="//type/text()"/>
<payloadFactory>
<format>
<p:Capp_musergroupdetails_insertion_op xmlns:p="http://ws.wso2.org/dataservice">
<p:usergroupid>$1</p:usergroupid>
<p:slno>$2</p:slno>
<p:userid>$3</p:userid>
<p:type>$4</p:type>
</p:Capp_musergroupdetails_insertion_op>
</format>
<args>
<arg evaluator="xml" expression="get-property('usergroupid')"/>
<arg evaluator="xml" expression="get-property('slno')"/>
<arg evaluator="xml" expression="get-property('userid')"/>
<arg evaluator="xml" expression="get-property('type')"/>
</args>
</payloadFactory>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="messageType" value="application/json" scope="axis2"/>
<send receive="Capp_UserGroupDetail_Seq">
<endpoint>
<address uri="http://192.168.1.23:9764/services/CappMuserDataservice/"/>
</endpoint>
</send>
</sequence>
</target>
</iterate>
And sequence configuration is :
equence xmlns="http://ws.apache.org/ns/synapse" name="Capp_UserGroupDetail_Seq" onError="fault">
<property name="CONTENT_TYPE" value="application/json" scope="axis2" type="STRING"/>
<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/>
<property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
<property name="RESPONSE" value="true" scope="default" type="STRING"/>
<property name="NO_ENTITY_BODY" action="remove" scope="axis2"/>
<property xmlns:ns="http://org.apache.synapse/xsd" xmlns:h="http://ws.wso2.org/dataservice" name="usergroupdetailid" expression="//usergroupdetailid/text()" scope="default" type="STRING"/>
<log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="usergroupdetailid" expression="get-property('usergroupdetailid')"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="usergroupid" expression="get-property('usergroupid')"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="userid" expression="get-property('userid')"/>
</log>
<payloadFactory>
<format>
<ResponseJSON xmlns="">
<Body>
<Datalist>
<Data>Successfully Rows inserted</Data>
</Datalist>
</Body>
<Status>200</Status>
</ResponseJSON>
</format>
</payloadFactory>
<log level="full"/>
<property name="messageType" value="application/json" scope="axis2"/>
<send/>
<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true" scope="default" type="STRING"/>
</sequence>
but it gives error at server side like:
INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:be41c3c9-f9c1-4ce9-933e-78b48e215601, Direction: response, usergroupdetailid = 370568479314543786, usergroupid = 370568478945445032, userid = 370568478735729831
[2014-05-27 12:23:25,165] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:be41c3c9-f9c1-4ce9-933e-78b48e215601, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ResponseJSON><Body><Datalist><Data>Successfully Rows inserted</Data></Datalist></Body><Status>200</Status></ResponseJSON></soapenv:Body></soapenv:Envelope>
[2014-05-27 12:23:25,167] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:06cf72eb-2aed-483b-81ce-3cbfefd0f511, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><Body/></soapenv:Envelope>
[2014-05-27 12:23:25,167] ERROR - PassThroughHttpSender Failed to submit the response
java.lang.NullPointerException
at org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeEndDocument(MappedXMLStreamWriter.java:189)
at org.apache.axis2.json.AbstractJSONMessageFormatter.writeTo(AbstractJSONMessageFormatter.java:194)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:440)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:254)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:161)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:308)
at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:92)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:239)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:443)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:166)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:222)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
[2014-05-27 12:23:25,168] ERROR - Axis2Sender Unexpected error sending message back
org.apache.axis2.AxisFault: Failed to submit the response
at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:501)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:256)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
at org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:161)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:308)
at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:92)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:239)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:443)
at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:166)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:222)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.NullPointerException
at org.codehaus.jettison.mapped.MappedXMLStreamWriter.writeEndDocument(MappedXMLStreamWriter.java:189)
at org.apache.axis2.json.AbstractJSONMessageFormatter.writeTo(AbstractJSONMessageFormatter.java:194)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:440)
at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:254)
... 15 more
[2014-05-27 12:23:25,169] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:ba684be3-b7bc-46bd-9c21-66495061c97d, Direction: response, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Unexpected error sending message back, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><Body/></soapenv:Envelope>
Is their any problem in sequence or anything else?please let me know.
The NullPointerException is caused by an empty Response : Soap body is empty (see 3rd log entry) and message formatter associated with application/json (org.apache.axis2.json.JSONMessageFormatter) can't handle it