On Wed, May 11, 2011 at 9:31 PM, Afkham Azeez <az...@wso2.com> wrote:
> replaceAll takes a regex as the first parameter. The second parameter is > just a normal String. So, unless the key contains special characters, this > cannot fail. Also, the replace method takes two characters as parameters, or > 2 CharSequences. So, replace & replaceAll have different behaviors. This failed when the second string has special characters. > > > On Wed, May 11, 2011 at 9:19 PM, Amila Maha Arachchi <ami...@wso2.com>wrote: > >> Hi, >> >> Theres this code segment in org.wso2.carbon.email.sender component. >> >> public static String replacePlaceHolders(String text, Map<String, String> >> userParameters) { >> if (userParameters != null) { >> for (Map.Entry<String, String> entry : >> userParameters.entrySet()) { >> String key = entry.getKey(); >> *text = text.replaceAll("\\{" + key + "\\}", >> entry.getValue());* >> } >> } >> return text; >> } >> >> >> Above String.replaceAll() method throws exceptions when there are special >> characters in the string which is being replaced with. i.e. In the above >> sample it is entry.getValue(). An example is the $ sign. This can be avoided >> by using \\$. But it is a headache. >> > > Can you give us an example for key and entryValue, and if possible the > exception stacktrace? > key: subscription-charges entryValues: Multitenancy Medium $50 Here is the stacktrace. [2011-05-11 19:56:42,999] ERROR {org.wso2.carbon.billing.core.handlers.EmailSendingHandler} - Error in sending the bill for the customer. customer: d.com, invoice id:19 java.lang.IndexOutOfBoundsException: No group 5 *<== Here, it breaks at $50. Thats why the 5 is there.If the values was $10, it would say No group 1.* at java.util.regex.Matcher.group(Matcher.java:470) at java.util.regex.Matcher.appendReplacement(Matcher.java:737) at java.util.regex.Matcher.replaceAll(Matcher.java:813) at java.lang.String.replaceAll(String.java:2189) at org.wso2.carbon.email.sender.util.Util.replacePlaceHolders(Util.java:97) at org.wso2.carbon.email.sender.api.EmailSender.getMessageBody(EmailSender.java:106) at org.wso2.carbon.email.sender.api.EmailSender.sendEmail(EmailSender.java:55) at org.wso2.carbon.billing.core.handlers.EmailSendingHandler.execute(EmailSendingHandler.java:82) at org.wso2.carbon.billing.core.BillingEngine.generateBill(BillingEngine.java:77) at org.wso2.carbon.billing.core.BillingEngine.generateBill(BillingEngine.java:59) at org.wso2.carbon.billing.core.scheduler.BillingJob.execute(BillingJob.java:42) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529) > > >> >> Instead, String.replace() can be used and* it too replaces all the >> occurrences* of the string being replaced. i.e. We can use >> >> *text = text.replace("{" + key + "}", entry.getValue()); >> >> *Therefore, is it ok that I change the above method with the latter >> mentioned one. >> >> Thanks, >> AmilaM. >> * >> * >> _______________________________________________ >> Carbon-dev mailing list >> Carbon-dev@wso2.org >> http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev >> >> > > > -- > *Afkham Azeez* > Director of Architecture; WSO2, Inc.; http://wso2.com > Member; Apache Software Foundation; http://www.apache.org/ > * <http://www.apache.org/>** > email: **az...@wso2.com* <az...@wso2.com>* cell: +94 77 3320919 > blog: **http://blog.afkham.org* <http://blog.afkham.org>* > twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> > * > linked-in: **http://lk.linkedin.com/in/afkhamazeez* > * > * > *Lean . Enterprise . Middleware* > > > _______________________________________________ > Stratos-dev mailing list > stratos-...@wso2.org > https://wso2.org/cgi-bin/mailman/listinfo/stratos-dev > >
_______________________________________________ Carbon-dev mailing list Carbon-dev@wso2.org http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev