[
https://issues.apache.org/jira/browse/MYFACES-4592?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17698093#comment-17698093
]
Volodymyr Siedlecki commented on MYFACES-4592:
----------------------------------------------
If we take a look at the lambda created in FlashClientWindowTokenCollection, we
can see that it relies on SerializedLambda.
[https://github.com/apache/myfaces/blob/89c747e85615e3f33265e664c8361789f38ea7db/impl/src/main/java/org/apache/myfaces/context/flash/FlashClientWindowTokenCollection.java#L36]
I found the lambda class via -Djdk.internal.lambda.dumpProxyClasses=<dir> File
is attached too
{code:java}
Classfile
~/lambdaproxy/org/apache/myfaces/context/flash/FlashClientWindowTokenCollection$$Lambda$708.class
Last modified Mar 8, 2023; size 887 bytes
MD5 checksum 88b788db82100923136e94639d73a1a2
final class
org.apache.myfaces.context.flash.FlashClientWindowTokenCollection$$Lambda$708
implements org.apache.myfaces.util.lang.SerializableConsumer
minor version: 0
major version: 52
flags: (0x1030) ACC_FINAL, ACC_SUPER, ACC_SYNTHETIC
this_class: #2 //
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection$$Lambda$708
super_class: #4 // java/lang/Object
interfaces: 1, fields: 0, methods: 3, attributes: 0
Constant pool:
#1 = Utf8
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection$$Lambda$708
#2 = Class #1 //
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection$$Lambda$708
#3 = Utf8 java/lang/Object
#4 = Class #3 // java/lang/Object
#5 = Utf8 org/apache/myfaces/util/lang/SerializableConsumer
#6 = Class #5 //
org/apache/myfaces/util/lang/SerializableConsumer
#7 = Utf8 <init>
#8 = Utf8 ()V
#9 = NameAndType #7:#8 // "<init>":()V
#10 = Methodref #4.#9 // java/lang/Object."<init>":()V
#11 = Utf8 accept
#12 = Utf8 (Ljava/lang/Object;)V
#13 = Utf8 Ljava/lang/invoke/LambdaForm$Hidden;
#14 = Utf8 java/util/Map$Entry
#15 = Class #14 // java/util/Map$Entry
#16 = Utf8
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection
#17 = Class #16 //
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection
#18 = Utf8 lambda$new$6723e7a0$1
#19 = Utf8 (Ljava/util/Map$Entry;)V
#20 = NameAndType #18:#19 //
lambda$new$6723e7a0$1:(Ljava/util/Map$Entry;)V
#21 = Methodref #17.#20 //
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection.lambda$new$6723e7a0$1:(Ljava/util/Map$Entry;)V
#22 = Utf8 writeReplace
#23 = Utf8 ()Ljava/lang/Object;
#24 = Utf8 java/lang/invoke/SerializedLambda
#25 = Class #24 // java/lang/invoke/SerializedLambda
#26 = String #5 //
org/apache/myfaces/util/lang/SerializableConsumer
#27 = String #11 // accept
#28 = String #12 // (Ljava/lang/Object;)V
#29 = Integer 6
#30 = String #16 //
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection
#31 = String #18 // lambda$new$6723e7a0$1
#32 = String #19 // (Ljava/util/Map$Entry;)V
#33 = Utf8
(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
#34 = NameAndType #7:#33 //
"<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
#35 = Methodref #25.#34 //
java/lang/invoke/SerializedLambda."<init>":(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
#36 = Utf8 Code
#37 = Utf8 RuntimeVisibleAnnotations
{
public void accept(java.lang.Object);
descriptor: (Ljava/lang/Object;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=2, args_size=2
0: aload_1
1: checkcast #15 // class java/util/Map$Entry
4: invokestatic #21 // Method
org/apache/myfaces/context/flash/FlashClientWindowTokenCollection.lambda$new$6723e7a0$1:(Ljava/util/Map$Entry;)V
7: return
RuntimeVisibleAnnotations:
0: #13()
java.lang.invoke.LambdaForm$Hidden
}{code}
> Lambda ClassCastException with Session Persistence
> --------------------------------------------------
>
> Key: MYFACES-4592
> URL: https://issues.apache.org/jira/browse/MYFACES-4592
> Project: MyFaces Core
> Issue Type: Bug
> Components: General
> Affects Versions: 4.0.0
> Reporter: Volodymyr Siedlecki
> Priority: Major
> Attachments: flash.zip
>
>
> In our setup, we have session persistence enabled, and we've discovered the
> following problem:
> Stack Dump = java.lang.ClassCastException: cannot assign instance of
> java.lang.invoke.SerializedLambda to field
> org.apache.myfaces.util.lang.LRULinkedHashMap.expiredCallback of type
> org.apache.myfaces.util.lang.SerializableConsumer in instance of
> org.apache.myfaces.util.l
> ang.LRULinkedHashMap
> SerializedLambda JavaDoc:
> [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/invoke/SerializedLambda.html]
>
> Relevant Code:
> [https://github.com/apache/myfaces/blob/myfaces-core-module-4.0.0/impl/src/main/java/org/apache/myfaces/util/lang/SerializableConsumer.java#L25]
> [https://github.com/apache/myfaces/blob/myfaces-core-module-4.0.0/impl/src/main/java/org/apache/myfaces/util/lang/LRULinkedHashMap.java#L30]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)