I am using merchant-sdk-java from maven in my android gradle project for express checkout integration and I am getting the following error:
08-10 15:42:30.233 26631-26731/com.spec.paypalpoc W/System.err﹕ java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 15:
08-10 15:42:30.234 26631-26731/com.spec.paypalpoc W/System.err﹕ (?<!{[01]{1})}
08-10 15:42:30.234 26631-26731/com.spec.paypalpoc W/System.err﹕ ^
08-10 15:42:30.234 26631-26731/com.spec.paypalpoc W/System.err﹕ at java.util.regex.Pattern.compileImpl(Native Method)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at java.util.regex.Pattern.compile(Pattern.java:411)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at java.util.regex.Pattern.(Pattern.java:394)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at java.util.regex.Pattern.compile(Pattern.java:381)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at java.lang.String.replaceAll(String.java:1600)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at com.paypal.core.soap.MerchantAPICallPreHandler.processPayLoadForFormatting(MerchantAPICallPreHandler.java:466)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at com.paypal.core.soap.MerchantAPICallPreHandler.getPayLoadUsingSOAPHeader(MerchantAPICallPreHandler.java:447)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at com.paypal.core.soap.MerchantAPICallPreHandler.getPayLoad(MerchantAPICallPreHandler.java:317)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at com.paypal.core.BaseService.call(BaseService.java:264)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.setExpressCheckout(PayPalAPIInterfaceServiceService.java:2196)
08-10 15:42:30.237 26631-26731/com.spec.paypalpoc W/System.err﹕ at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.setExpressCheckout(PayPalAPIInterfaceServiceService.java:2148)
So basically when I looked into this method:
/**
* Process the payload before using message formatting
*/
private String processPayLoadForFormatting(String payLoad) {
Matcher match = REGEX_PATTERN.matcher(payLoad);
StringBuffer sb = new StringBuffer();
while (match.find()) {
match.appendReplacement(sb, "'" + match.group());
}
match.appendTail(sb);
// Fix json strings in element values by replacing {
// by '{' and matching } by '}'
return sb.toString().replaceAll("(?<!\\{[01]{1})}", "'}' ")
.replaceAll("\\{(?![01]})", "'{' ");
}
We need to escape "}" in this line :
return sb.toString().replaceAll("(?<!\\{[01]{1})}", "'}' ")
.replaceAll("\\{(?![01]})", "'{' ");
As in android escaping "{, }" works fine. Android | Syntax Error in regexp pattern
Kindly let me know if there is any workaround in the matter.
Thanks and Regards,
Namrata Bagerwal.