escaping - How to escape curly braces in hibernate validator messages (test case provided) -
i want put {this} message value hibernate validator validation message.
so escaped value of given message in properties file :\{this\}
however hibrnate validator tries check if there message given key. think bug maybe doing wrong? (tested hibernate-validator 4.3.1 , 5.0.1 - same result - stack overflow
test case:
(for simplification not have properties file, return value java class. in reality handlegetobject read value custom-provided properties):
import org.hibernate.validator.hibernatevalidator; import org.hibernate.validator.hibernatevalidatorconfiguration; import org.hibernate.validator.internal.engine.constraintvalidation.constraintvalidatorfactoryimpl; import org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator; import org.hibernate.validator.spi.resourceloading.resourcebundlelocator; import org.junit.test; import javax.validation.*; import javax.validation.constraints.max; import java.util.enumeration; import java.util.locale; import java.util.resourcebundle; import java.util.set; public class hibvaltest { @test public void shouldnotsubstituteescaped() throws exception { messageinterpolator interpolator = new resourcebundlemessageinterpolator( new resourcebundlelocator() { @override public resourcebundle getresourcebundle(locale locale) { return new resourcebundle() { @override protected object handlegetobject(string key) { return "\\{escapedkey\\}"; } @override public enumeration<string> getkeys() { throw new unsupportedoperationexception(); } }; } }, false); hibernatevalidatorconfiguration config = validation.byprovider( hibernatevalidator.class ).configure(); config = config.messageinterpolator(interpolator).constraintvalidatorfactory(new constraintvalidatorfactoryimpl()); validatorfactory factory = config.buildvalidatorfactory(); validator validator = factory.getvalidator(); set<constraintviolation<a>> validate = validator.validate(new a()); } private class { @max(value=1, message = "{key}") private int a=2; } }
result:
at org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.resolveparameter(resourcebundlemessageinterpolator.java:244) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.interpolatebundlemessage(resourcebundlemessageinterpolator.java:211) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.resolveparameter(resourcebundlemessageinterpolator.java:244) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.interpolatebundlemessage(resourcebundlemessageinterpolator.java:211) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.resolveparameter(resourcebundlemessageinterpolator.java:244) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.interpolatebundlemessage(resourcebundlemessageinterpolator.java:211) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.resolveparameter(resourcebundlemessageinterpolator.java:244) @ org.hibernate.validator.messageinterpolation.resourcebundlemessageinterpolator.interpolatebundlemessage(resourcebundlemessageinterpolator.java:211)
this looks bug indeed. create ticket in our issue tracker, please?
for time being, work around not providing value escaped key (if that's possible in case), e.g. so:
protected object handlegetobject(string key) { return key.equals("key") ? "\\{escapedkey\\}" : null; }
Comments
Post a Comment