Skip to content

Avoid accessing ThreadLocal - #13959

Draft
mkurz wants to merge 3 commits into
playframework:mainfrom
mkurz:avoid_spring_threadlocal
Draft

mkurz wants to merge 3 commits into
playframework:mainfrom
mkurz:avoid_spring_threadlocal

Conversation

@mkurz

@mkurz mkurz commented May 28, 2026

Copy link
Copy Markdown
Member

Covered by following test:

"have the validator translate error messages correctly" in new WithApplication(
application("play.i18n.langs" -> List("de", "en", "ja"))
) {
override def running() = {
val myFormJa = formFactory
.form(classOf[JavaI18NValidatorForm])
.bind(new Lang(Locale.JAPANESE), TypedMap.empty(), Map("note" -> "foo").asJava)
myFormJa.errors("note").get(0).message() must beEqualTo("10 から 100 の間のサイズにしてください")
val myFormEn = formFactory
.form(classOf[JavaI18NValidatorForm])
.bind(new Lang(Locale.ENGLISH), TypedMap.empty(), Map("note" -> "foo").asJava)
myFormEn.errors("note").get(0).message() must beEqualTo("size must be between 10 and 100")
val myFormDe = formFactory
.form(classOf[JavaI18NValidatorForm])
.bind(new Lang(Locale.GERMAN), TypedMap.empty(), Map("note" -> "foo").asJava)
myFormDe.errors("note").get(0).message() must beEqualTo("Größe muss zwischen 10 und 100 sein")
// French not defined in config, fall back to default (which is german, since it is first in the list)
val myFormFr = formFactory
.form(classOf[JavaI18NValidatorForm])
.bind(new Lang(Locale.FRENCH), TypedMap.empty(), Map("note" -> "foo").asJava)
myFormFr.errors("note").get(0).message() must beEqualTo("Größe muss zwischen 10 und 100 sein")
}

@mkurz

mkurz commented Jun 19, 2026

Copy link
Copy Markdown
Member Author
[error] Test javaguide.forms.JavaForms.constraints failed: jakarta.validation.ValidationException: HV000149: An exception occurred during message interpolation, took 0.07 sec
[error]     at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.interpolate(AbstractValidationContext.java:313)
[error]     at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.addConstraintFailure(AbstractValidationContext.java:218)
[error]     at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:45)
[error]     at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:124)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:601)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:546)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:512)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:448)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:398)
[error]     at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:170)
[error]     at play.data.Form.lambda$runValidation$0(Form.java:1123)
[error]     at play.data.Form.withRequestLocale(Form.java:1880)
[error]     at play.data.Form.runValidation(Form.java:1108)
[error]     at play.data.Form.bind(Form.java:1268)
[error]     at play.data.Form.bind(Form.java:1241)
[error]     at javaguide.forms.JavaForms.constraints(JavaForms.java:108)
[error]     at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
[error]     at java.lang.reflect.Method.invoke(Method.java:565)
[error]     ...
[error] Caused by: java.lang.NullPointerException: Cannot invoke "play.i18n.Lang.toLocale()" because the return value of "play.data.validation.Constraints$ValidationPayload.getLang()" is null
[error]     at play.data.validation.ValidatorFactoryProvider$1.interpolate(ValidatorFactoryProvider.java:49)
[error]     at org.hibernate.validator.internal.engine.validationcontext.AbstractValidationContext.interpolate(AbstractValidationContext.java:304)
[error]     ... 52 more
```

@mkurz
mkurz force-pushed the avoid_spring_threadlocal branch from ef815a1 to b20a457 Compare June 20, 2026 20:35
@mkurz
mkurz force-pushed the avoid_spring_threadlocal branch from b20a457 to e640527 Compare September 23, 2026 00:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant