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

Reply via email to