Skip to content

Commit

Permalink
Merge pull request #338 from chanakaudaya/master
Browse files Browse the repository at this point in the history
Fixing the issue with PF mediator when json strings are given as args…
  • Loading branch information
chanakaudaya committed Sep 1, 2015
2 parents 56d29ea + afbfbcb commit 508d168
Showing 1 changed file with 21 additions and 0 deletions.
Expand Up @@ -69,6 +69,12 @@ public class PayloadFactoryMediator extends AbstractMediator {
private final static String TEXT_TYPE = "text";
private final static String STRING_TYPE = "str";
private final static QName TEXT_ELEMENT = new QName("http://ws.apache.org/commons/ns/payload", "text");
private final static String ESCAPE_DOUBLE_QUOTE_WITH_FIVE_BACK_SLASHES = "\\\\\"";
private final static String ESCAPE_DOUBLE_QUOTE_WITH_NINE_BACK_SLASHES = "\\\\\\\\\"";
private final static String ESCAPE_BACK_SLASH_WITH_SIXTEEN_BACK_SLASHES = "\\\\\\\\\\\\\\\\";
private final static String ESCAPE_DOUBLE_QUOTE_WITH_TEN_BACK_SLASHES = "\\\\\\\\\"";
private final static String ESCAPE_DOLLAR_WITH_SIX_BACK_SLASHES = "\\\\\\$";
private final static String ESCAPE_DOLLAR_WITH_TEN_BACK_SLASHES = "\\\\\\\\\\$";

private List<Argument> pathArgumentList = new ArrayList<Argument>();
private Pattern pattern = Pattern.compile("\\$(\\d)+");
Expand Down Expand Up @@ -278,6 +284,9 @@ private void replace(String format, StringBuffer result, MessageContext synCtx)
try {
replacementValue = "<jsonObject>" + replacementEntry.getKey() + "</jsonObject>";
OMElement omXML = AXIOMUtil.stringToOM(replacementValue);
replacementValue = JsonUtil.toJsonString(omXML).toString()
.replaceAll(ESCAPE_DOUBLE_QUOTE_WITH_FIVE_BACK_SLASHES, ESCAPE_DOUBLE_QUOTE_WITH_NINE_BACK_SLASHES)
.replaceAll(ESCAPE_DOLLAR_WITH_TEN_BACK_SLASHES, ESCAPE_DOLLAR_WITH_SIX_BACK_SLASHES);
replacementValue = JsonUtil.toJsonString(omXML).toString();
} catch (XMLStreamException e) {
handleException("Error parsing XML for JSON conversion, please check your xPath expressions return valid XML: ", synCtx);
Expand Down Expand Up @@ -305,6 +314,18 @@ private void replace(String format, StringBuffer result, MessageContext synCtx)
} else {
// No conversion required, as path evaluates to regular String.
replacementValue = replacementEntry.getKey();
// This is to replace " with \" and \\ with \\\\
if (mediaType.equals(JSON_TYPE) && inferReplacementType(replacementEntry).equals(STRING_TYPE) &&
(!replacementValue.startsWith("{") && !replacementValue.startsWith("["))) {
replacementValue = replacementValue
.replaceAll(Matcher.quoteReplacement("\\\\"), ESCAPE_BACK_SLASH_WITH_SIXTEEN_BACK_SLASHES)
.replaceAll("\"", ESCAPE_DOUBLE_QUOTE_WITH_TEN_BACK_SLASHES);
}
else if ((mediaType.equals(JSON_TYPE) && inferReplacementType(replacementEntry).equals(JSON_TYPE)) &&
(!replacementValue.startsWith("{") && !replacementValue.startsWith("["))) {
// This is to handle only the string value
replacementValue = replacementValue.replaceAll("\"", ESCAPE_DOUBLE_QUOTE_WITH_TEN_BACK_SLASHES);
}
}
matcher.appendReplacement(result, replacementValue);
}
Expand Down

0 comments on commit 508d168

Please sign in to comment.