Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@mkurz
Copy link
Member

@mkurz mkurz commented Jul 15, 2025

Same as

but for the Java API.

I thought Java's RequestHeader just passes through to the underlying Scala rh methods, but it turns out only for cookies, but not for Flash and Session.

The tests in the first commit I push should fail with:

[info] Test run play.mvc.AttributesTest started
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession[0] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession[0] failed: java.util.NoSuchElementException: key not found: Session, took 0.002 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.libs.typedmap.TypedMap.get(TypedMap.java:47)
[error]     at play.mvc.Http$RequestHeader.session(Http.java:376)
[error]     at play.core.j.RequestHeaderImpl.session(JavaHelpers.scala:195)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession(AttributesTest.java:133)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash[0] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash[0] failed: java.util.NoSuchElementException: key not found: Flash, took 0.0 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.libs.typedmap.TypedMap.get(TypedMap.java:47)
[error]     at play.mvc.Http$RequestHeader.flash(Http.java:385)
[error]     at play.core.j.RequestHeaderImpl.flash(JavaHelpers.scala:195)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash(AttributesTest.java:140)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_KeepCurrentAttributesWhenAddingMultipleOnes[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_OverrideExistingValueWhenAddingMultipleAttributes[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_OverrideExistingValue[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_addMultipleAttributes[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_addSingleAttribute[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies[0] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies[0] failed: java.util.NoSuchElementException: key not found: Cookies, took 0.0 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.api.mvc.RequestHeader.cookies(RequestHeader.scala:269)
[error]     at play.api.mvc.RequestHeader.cookies$(RequestHeader.scala:269)
[error]     at play.api.mvc.RequestImpl.cookies(Request.scala:145)
[error]     at play.core.j.RequestHeaderImpl.cookies(JavaHelpers.scala:227)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies(AttributesTest.java:127)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_KeepCurrentAttributesWhenAddingANewOne[0] started
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession[1] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession[1] failed: java.util.NoSuchElementException: key not found: Session, took 0.0 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.libs.typedmap.TypedMap.get(TypedMap.java:47)
[error]     at play.mvc.Http$RequestHeader.session(Http.java:376)
[error]     at play.core.j.RequestHeaderImpl.session(JavaHelpers.scala:195)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesSession(AttributesTest.java:133)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash[1] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash[1] failed: java.util.NoSuchElementException: key not found: Flash, took 0.001 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.libs.typedmap.TypedMap.get(TypedMap.java:47)
[error]     at play.mvc.Http$RequestHeader.flash(Http.java:385)
[error]     at play.core.j.RequestHeaderImpl.flash(JavaHelpers.scala:195)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesFlash(AttributesTest.java:140)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_KeepCurrentAttributesWhenAddingMultipleOnes[1] started
[info] Test play.mvc.AttributesTest.testRequestHeader_OverrideExistingValueWhenAddingMultipleAttributes[1] started
[info] Test play.mvc.AttributesTest.testRequestHeader_OverrideExistingValue[1] started
[info] Test play.mvc.AttributesTest.testRequestHeader_addMultipleAttributes[1] started
[info] Test play.mvc.AttributesTest.testRequestHeader_addSingleAttribute[1] started
[info] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies[1] started
[error] Test play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies[1] failed: java.util.NoSuchElementException: key not found: Cookies, took 0.0 sec
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:243)
[error]     at scala.collection.immutable.Map$EmptyMap$.apply(Map.scala:239)
[error]     at play.api.libs.typedmap.DefaultTypedMap.apply(TypedMap.scala:189)
[error]     at play.api.mvc.RequestHeader.cookies(RequestHeader.scala:269)
[error]     at play.api.mvc.RequestHeader.cookies$(RequestHeader.scala:269)
[error]     at play.api.mvc.RequestImpl.cookies(Request.scala:145)
[error]     at play.core.j.RequestHeaderImpl.cookies(JavaHelpers.scala:227)
[error]     at play.mvc.AttributesTest.testRequestHeader_emptyAttributesCookies(AttributesTest.java:127)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[error]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error]     at java.lang.reflect.Method.invoke(Method.java:569)
[error]     ...
[info] Test play.mvc.AttributesTest.testRequestHeader_KeepCurrentAttributesWhenAddingANewOne[1] started
[info] Test run play.mvc.AttributesTest finished: 6 failed, 0 ignored, 18 total, 0.01s

@mkurz
Copy link
Member Author

mkurz commented Jul 15, 2025

As expected, tests fail: https://github.com/playframework/playframework/actions/runs/16292812526/job/46007043206?pr=13413#step:12:4175

Pushing fix and merging afterwards.

@mkurz mkurz marked this pull request as ready for review July 15, 2025 12:23
@mkurz
Copy link
Member Author

mkurz commented Jul 15, 2025

fyi, the fix is only necessary for Session and Flash.
For Cookies we do not have a default method here, instead it gets overriden here which just passes through to the Scala RequestHeader cookies method which we already fixed in #13407

@mergify mergify bot force-pushed the RequestHeader_empty-attrs_java branch from 6068aa9 to aa3e919 Compare July 15, 2025 12:47
@mkurz
Copy link
Member Author

mkurz commented Jul 15, 2025

Tests passed, not waiting again.
https://github.com/playframework/playframework/actions/runs/16293154860

@mkurz mkurz merged commit 8050ccb into playframework:main Jul 15, 2025
18 of 20 checks passed
@mkurz mkurz deleted the RequestHeader_empty-attrs_java branch July 15, 2025 12:58
@mkurz
Copy link
Member Author

mkurz commented Jul 15, 2025

@Mergifyio backport 2.9.x 3.0.x

@mergify
Copy link
Contributor

mergify bot commented Jul 15, 2025

mergify bot added a commit that referenced this pull request Jul 15, 2025
[2.9.x] Make sure Java's Session and Flash always exists even if empty req attrs (backport #13413) by @mkurz
mergify bot added a commit that referenced this pull request Jul 15, 2025
[3.0.x] Make sure Java's Session and Flash always exists even if empty req attrs (backport #13413) by @mkurz
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.

2 participants