|
23 | 23 | import java.util.Locale;
|
24 | 24 | import java.util.MissingResourceException;
|
25 | 25 | import java.util.ResourceBundle;
|
| 26 | +import java.util.regex.Matcher; |
| 27 | +import java.util.regex.Pattern; |
26 | 28 |
|
27 | 29 | import javax.validation.MessageInterpolator;
|
28 | 30 | import javax.xml.bind.ValidationException;
|
@@ -110,6 +112,11 @@ public abstract class AbstractMessageInterpolator implements MessageInterpolator
|
110 | 112 | */
|
111 | 113 | private final boolean cachingEnabled;
|
112 | 114 |
|
| 115 | + private static final Pattern LEFT_BRACE = Pattern.compile("\\{", Pattern.LITERAL); |
| 116 | + private static final Pattern RIGHT_BRACE = Pattern.compile("\\}", Pattern.LITERAL); |
| 117 | + private static final Pattern SLASH = Pattern.compile("\\\\", Pattern.LITERAL); |
| 118 | + private static final Pattern DOLLAR = Pattern.compile("\\$", Pattern.LITERAL); |
| 119 | + |
113 | 120 | public AbstractMessageInterpolator() {
|
114 | 121 | this( null );
|
115 | 122 | }
|
@@ -299,10 +306,10 @@ private String interpolateMessage(String message, Context context, Locale locale
|
299 | 306 | }
|
300 | 307 |
|
301 | 308 | private String replaceEscapedLiterals(String resolvedMessage) {
|
302 |
| - resolvedMessage = resolvedMessage.replace( "\\{", "{" ); |
303 |
| - resolvedMessage = resolvedMessage.replace( "\\}", "}" ); |
304 |
| - resolvedMessage = resolvedMessage.replace( "\\\\", "\\" ); |
305 |
| - resolvedMessage = resolvedMessage.replace( "\\$", "$" ); |
| 309 | + resolvedMessage = LEFT_BRACE.matcher(resolvedMessage).replaceAll("{"); |
| 310 | + resolvedMessage = RIGHT_BRACE.matcher(resolvedMessage).replaceAll("}"); |
| 311 | + resolvedMessage = SLASH.matcher(resolvedMessage).replaceAll(Matcher.quoteReplacement("\\")); |
| 312 | + resolvedMessage = DOLLAR.matcher(resolvedMessage).replaceAll(Matcher.quoteReplacement("$")); |
306 | 313 | return resolvedMessage;
|
307 | 314 | }
|
308 | 315 |
|
|
0 commit comments