Reputation: 179
Im having issue with payloads. I followed the https://docs.wso2.com/display/ESB500/Exposing+Several+Services+as+a+Single+Service
but cannot create a proper payload
<log level="custom">
<property expression="fn:concat('VIN: ',get-property('vin'),' ModelName: ',get-property('modelName'),' Year: ',get-property('modelYear'))" name="vechicle"/>
</log>
<payloadFactory description="VIN message" media-type="json">
<format>{
"VIN":$1,
}</format>
<args>
<arg evaluator="xml" expression="$ctx:vin"/>
</args>
</payloadFactory>
get-property('vin') is working becouse I see it in log BUT payload not replacing $1 with real value , something is wrong with evaluate
Error message :
Could not get parser from data source for element jsonObject
TID[-1234] [ESB] [2017-03-07 23:46:37,611] ERROR {org.apache.axiom.om.impl.llom.OMSourcedElementImpl} - Could not get parser from data source for element jsonObject org.apache.synapse.commons.staxon.core.base.AbstractXMLStreamReader.initialize(AbstractXMLStreamReader.java:245) org.apache.synapse.commons.staxon.core.json.JsonXMLStreamReader.(JsonXMLStreamReader.java:66) org.apache.synapse.commons.staxon.core.json.JsonXMLInputFactory.createXMLStreamReader(JsonXMLInputFactory.java:165) org.apache.synapse.commons.json.JsonUtil.getReader(JsonUtil.java:302) org.apache.synapse.commons.json.JsonDataSource.getReader(JsonDataSource.java:153) org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getDirectReader(OMSourcedElementImpl.java:225) org.apache.axiom.om.impl.llom.OMSourcedElementImpl.forceExpand(OMSourcedElementImpl.java:254) org.apache.axiom.om.impl.llom.OMSourcedElementImpl.getFirstOMChild(OMSourcedElementImpl.java:867) org.apache.axiom.om.impl.OMNavigator._getFirstChild(OMNavigator.java:196) org.apache.axiom.om.impl.OMNavigator.updateNextNode(OMNavigator.java:140) org.apache.axiom.om.impl.OMNavigator.getNext(OMNavigator.java:112) org.apache.axiom.om.impl.SwitchingWrapper.updateNextNode(SwitchingWrapper.java:1113) org.apache.axiom.om.impl.SwitchingWrapper.(SwitchingWrapper.java:235) org.apache.axiom.om.impl.OMStAXWrapper.(OMStAXWrapper.java:74) org.apache.axiom.om.impl.llom.OMStAXWrapper.(OMStAXWrapper.java:52) org.apache.axiom.om.impl.llom.OMContainerHelper.getXMLStreamReader(OMContainerHelper.java:51) org.apache.axiom.om.impl.llom.OMElementImpl.getXMLStreamReader(OMElementImpl.java:736) org.apache.axiom.om.impl.llom.OMElementImpl.cloneOMElement(OMElementImpl.java:1038) org.apache.synapse.util.MessageHelper.cloneSOAPEnvelope(MessageHelper.java:690)
help...
Upvotes: 1
Views: 547
Reputation: 2653
The problem seems to be in the JSON message. Firstthe formatting of the JSON message itself should not matter therefore the carriage returns should be obsolete. However that does not seem to be the problem. Second, there is a comma after the $1, this suggests there will be another object but instead there is a carriage return and then the closing bracket, this is what actually breaks the parser:. I would try it like this (although you can leave the carriage returns in, I've tested both on ESB 5.0.0)
<payloadFactory description="VIN message" media-type="json">
<format>{
"VIN":$1
}</format>
<args>
<arg evaluator="xml" expression="$ctx:vin"/>
</args>
</payloadFactory>
Also, if vin is a string then you might have to add quotes in your format as well.
Upvotes: 1