[ 
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)

Reply via email to