Hi Lahiru, Thanks for the clarification. It cleared my doubt. Amitha On Sep 27 2018, at 8:02 am, Lahiru Madushanka <lahirum...@wso2.com> wrote: > > Hi Amith, > > Explanation of how json-eval() works. > > We have two kinds of path expressions in synapse, synapseJsonPath and > synapseXPath > Following method is where we evaluate the json-eval() expressions > > public String stringValueOf(MessageContext synCtx) { > org.apache.axis2.context.MessageContext amc = ((Axis2MessageContext) > synCtx).getAxis2MessageContext(); > InputStream stream; > if (!JsonUtil.hasAJsonPayload(amc) || "true".equals(enableStreamingJsonPath)) > { > try { > if (null == amc.getEnvelope().getBody().getFirstElement()) { > // Get message from PT Pipe. > stream = getMessageInputStreamPT(amc); > if (stream == null) { > stream = JsonUtil.getJsonPayload(amc); > } else { > JsonUtil.getNewJsonPayload(amc, stream, true, true); > } > } else { > // Message Already built. > stream = JsonUtil.toJsonStream(amc.getEnvelope().getBody().getFirstElement()); > } > if(stream != null) { > return stringValueOf(stream); > }else{ > log.warn("Json Payload is empty."); > return ""; > } > } catch (IOException e) { > handleException("Could not find JSON Stream in PassThrough Pipe during JSON > path evaluation.", e); > } > } else { > stream = JsonUtil.getJsonPayload(amc); > return stringValueOf(stream); > } > return ""; > } > > > In all the branches we use stringValueOf(stream) method to evaluate the > jsonPath expressions against an input-stream. > Where we take the stream is dependent on certain conditions as in the above > implementation. > > If message already build we convert message body to a JSON stream in > > stream = > > JsonUtil.toJsonStream(amc.getEnvelope().getBody().getFirstElement()); > > > > > > If message is not already built we take the stream from passthrough Pipe > > > > Pipe pipe= (Pipe) > > context.getProperty(PassThroughConstants.PASS_THROUGH_PIPE); > > > > In the final else condition we take the stream from a property in axis2 > message context > > > > Object o = > > messageContext.getProperty(ORG_APACHE_SYNAPSE_COMMONS_JSON_JSON_INPUT_STREAM); > > > > > You can find all implementation details in [1] > > [1] https://github.com/wso2/wso2-synapse > > Thanks, > Lahiru > > > > > > > > On Wed, Sep 26, 2018 at 7:31 PM Nuwan Dias <nuw...@wso2.com > (mailto:nuw...@wso2.com)> wrote: > > Adding Isuru and Shafreen. > > > > The mediation engine (EI/API Gateway) supports transforming or changing > > messages from various protocols to various other protocols. Such as from > > XML to JSON, from Text to XML, from form-url to JSON, likewise. To support > > these various types of transformations, upon receiving a message the engine > > would first convert it into a common base, and then convert it to the > > requested base, likewise. Without doing which, the combinations of these > > transformations would be endless. In the case of EI/API Gateway, this > > common base is XML. So every message, if you need to process it, is first > > converted to XML and then all changes or transformation are done on the > > particular XML message and then converted to whatever the requested format > > is. So as far as I know you can't work with the message on plain JSON > > format only. However, I've added two of my colleagues who have a better > > idea about this than me to see if this is possible. > > > > Thanks, > > NuwanD. > > > > > > On Wed, Sep 26, 2018 at 2:11 PM Amitha Dissanayake <ami...@yaalalabs.com > > (mailto:ami...@yaalalabs.com)> wrote: > > > Hi Nuwan, > > > > > > Thanks a lot for the prompt response. That document helped. However, my > > > original question still remains unresolved to me. > > > More specifically, when using the class mediator, I used the property > > > mediator and received the JSON string to the class. But I still have to > > > convert to XML and load it to the axis2 context message envelope (i.e. > > > SOAP). > > > <property name="messageType" value="application/json" scope="axis2"/> > > > <property name="JSON-Payload" expression="json-eval($.)"/> > > > > > > > > > > > > I couldn't find how this json-eval() function evaluates the JSON payload > > > (Whether it's accessing a JSON representation or an XML representation). > > > How can I do this without converting the JSON to XML (without converting > > > it to XML and attaching to axis2 message)? > > > How is JSON represented in the EI / API Manager by default (XML or JSON)? > > > I understand that conversions and manipulations are possible either way. > > > Can the the EI / API Manager keep the JSON payload not converted > > > end-to-end (i.e. from the point of backend REST API sending the response > > > with a JSON payload till the requester receiving it? > > > I'm evaluating API Manager, while hoping to apply it to a latency and > > > performance critical application. That is why I'm trying to understand > > > how it works in the EI. > > > Thanks. > > > Regards, > > > Amitha > > > > > > On Sep 26 2018, at 2:12 pm, Nuwan Dias <nuw...@wso2.com > > > (mailto:nuw...@wso2.com)> wrote: > > > > > > > > Hi Amitha, > > > > > > > > Maybe this document [1] would help you understand how to deal with JSON > > > > payloads better. > > > > > > > > [1] - > > > > https://docs.wso2.com/display/EI630/Working+with+JSON+Message+Payloads > > > > > > > > Thanks, > > > > NuwanD. > > > > > > > > > > > > > > > > On Wed, Sep 26, 2018 at 10:01 AM Amitha Dissanayake > > > > <ami...@yaalalabs.com (mailto:ami...@yaalalabs.com)> wrote: > > > > > Hi, > > > > > > > > > > I'm a developer who's exploring API Manager. When I was attempting to > > > > > retrieve the JSON payload form a Context Message during mediation > > > > > (out sequence), I observed that the payload it attached in a SOAP > > > > > Envelope inside the Axis2 Context Message. However, I'm receiving the > > > > > response from a REST endpoint. > > > > > In that case I had to convert the SOAP Evelope XML to JSON, then > > > > > modify the changes and again convert it to XML and attach to Axis2 > > > > > Context Message. In that operation, 4 conversions happen. That is, > > > > > Between the endpoint and mediation point. JSON to XML > > > > > > > > > > During mediation, I convert XML to JSON and do the operation, > > > > > > > > > > I again convert the JSON to XML and attach to the axis2 message. > > > > > > > > > > Postman receives a JSON; means XML has again been converted inside > > > > > the API Manager. > > > > > > > > > > When I ran the mediation on debug mode, I observed that the content > > > > > is received as SOAPAction to the mediation point. > > > > > I feel that this adds an unnecessary latency overhead or I am doing > > > > > something wrong in the process. Is there a way to overcome this > > > > > issue/ directly access the JSON payload or what is the correct way to > > > > > access the JSON payload without too many conversions? > > > > > Thanks in Advance. > > > > > Regards, > > > > > Amitha Dissanayake > > > > > Senior Software Engineer > > > > > > > > > > > > > > > > > > > > > > > > > Yaala Labs > > > > > > > > > > 14 Sir Baron Jayathilake Mawatha > > > > > > > > > > Colombo 1, Sri Lanka > > > > > > > > > > m: + 94 77 548 1350 > > > > > > > > > > e: ami...@yaalalabs.com (mailto:ami...@yaalalabs.com) > > > > > > > > > > > > > > > > > > > > www.yaalalabs.com (http://www.yaalalabs.com/) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > Dev mailing list > > > > > Dev@wso2.org (mailto:Dev@wso2.org) > > > > > http://wso2.org/cgi-bin/mailman/listinfo/dev > > > > > > > > > > > > > > > > > > > > -- > > > > Nuwan Dias | Director | WSO2 Inc. > > > > > > > > (m) +94 777 775 729 | (e) nuw...@wso2.com (mailto:nuw...@wso2.com) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > Nuwan Dias | Director | WSO2 Inc. > > > > (m) +94 777 775 729 | (e) nuw...@wso2.com (mailto:nuw...@wso2.com) > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > Dev mailing list > > Dev@wso2.org (mailto:Dev@wso2.org) > > http://wso2.org/cgi-bin/mailman/listinfo/dev > > >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev