ok, I think I understand what you’re describing.
In an Apigee proxy, the payload of a request is available via a context variable called “request.content”.
The full XML of an inbound soap request is available there. You can’t just embed it directly in the right-hand-side of a JSON property, because that XML might have double quotes, and in JSON the double-quotes have to be escaped. Fortunately in the “message template” of Apigee, there is a function you can use, escapeJSON, to make that all work correctly.
So what you could do is
<AssignMessage name='AM-Embed'>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<Set>
<Payload contentType='application/json'>{
"body": "{escapeJSON(request.content)}"
}
</Payload>
</Set>
</AssignMessage>
This is the result I see
{
"body": "<soap:Envelope xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soap:Header> <wsse:Security> <wsu:Timestamp wsu:Id=\"Timestamp-7cd6d5e5\"> <wsu:Created>2020-08-04</wsu:Created> </wsu:Timestamp> </wsse:Security> </soap:Header> <soap:Body> <Operation> data here </Operation> </soap:Body></soap:Envelope>"
}
Check it out, all of the double-quotes are escaped as we wanted.
The converse, extracting the right-hand-side of a JSON property into … the request content, which you must do on the response side, is a little different because you must un-embed a string from the full content.
The full content of the response comes back and you want to get just one piece of it, a subset of it.
To do that you need to use jsonpath to reach into the JSON. Fortunately, again, there is a function for that in the message template. This is what it looks like:
<AssignMessage name='AM-UnEmbed'>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignVariable>
<Name>jpath1</Name>
<Value>$.body</Value>
</AssignVariable>
<Set>
<Payload contentType='application/xml'>{jsonPath(jpath1,response.content)}</Payload>
</Set>
</AssignMessage>
Doing it that way gets you the XML. There’s no need to “unescape” the quotes - that happens automatically.