You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by smallufo <sm...@gmail.com> on 2021/04/30 04:52:35 UTC

Kotlin 1.5.0 : NotSerializableException: Non-serializable lambda

I was using Kotlin 1.4.32 with wicket 8.11
but after upgrading to Kotlin 1.5.0 , it throws :

Caused by: java.io.NotSerializableException: Non-serializable lambda
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at
java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1196)
at
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1523)
at
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1444)
at
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1187)
at
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1579)


what may go wrong here ?

The wicket mode is DEPLOYMENT

<filter>
  <filter-name>wicket</filter-name>
  <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
  <init-param>
    <param-name>applicationClassName</param-name>
    <param-value>foo.bar.MyApplication</param-value>
  </init-param>
  <init-param>
    <param-name>configuration</param-name>
    <param-value>DEPLOYMENT</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>wicket</filter-name>
  <url-pattern>/app/*</url-pattern>
</filter-mapping>


@MacMiniM1  ~  java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment Zulu15.29+15-CA (build 15.0.2+7)
OpenJDK 64-Bit Server VM Zulu15.29+15-CA (build 15.0.2+7, mixed mode)



Thanks

Re: Kotlin 1.5.0 : NotSerializableException: Non-serializable lambda

Posted by smallufo <sm...@gmail.com>.
follow this workaround solves the problem (temporarily)
Workaround: use -Xsam-conversions=class

https://youtrack.jetbrains.com/issue/KT-46359#focus=Comments-27-4862857.0-0

<plugins>
  <plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <configuration>
      <args>
        <arg>-Xsam-conversions=class</arg>
      </args>
    </configuration>
  </plugin>
</plugins>


Bas Gooren <ba...@iswd.nl> 於 2021年5月3日 週一 下午4:22寫道:

> Hi!
>
> Probably related to this:
>
> https://youtrack.jetbrains.com/issue/KT-46373
>
> "Since 1.5, SAM-converted lambdas are generated using invokedynamic with
> bootstrap method from java.lang.invoke.LambdaMetafactory.
> Resulting proxy classes are not Serializable by default.”
>
> So your lambda’s in WizardPage are no longer serializable by default due
> to your upgrade to kotlin 1.5.0.
>
> So I’d recommend downgrading your Kotlin for now.
>
> (I’m not an active user of kotlin, so I found this information with 10
> minutes of Googling)
>
> Met vriendelijke groet,
> Kind regards,
>
> Bas Gooren
>
> Op 30 april 2021 bij 07:06:45, smallufo (smallufo@gmail.com) schreef:
>
> more detail log :
>
> 2021-04-30 12:43:44.076 [http-nio-8080-exec-2] WARN
> o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
> to writeObject : Non-serializable lambda, path: /children/[write:1]/data
> 2021-04-30 12:43:44.078 [http-nio-8080-exec-2] WARN
> o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
> to writeObject : Non-serializable lambda, path: /children/[write:2]
> 2021-04-30 12:43:44.079 [http-nio-8080-exec-2] WARN
> o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
> to writeObject : Non-serializable lambda, path: /children
> 2021-04-30 12:43:44.099 [http-nio-8080-exec-2] ERROR
> o.a.w.s.j.JavaSerializer.serialize - Error serializing object class
> destiny.WizardPage [object=[Page class = destiny.WizardPage, id = 1,
> render
> count = 1]]
> org.apache.wicket.WicketRuntimeException: A problem occurred while trying
> to collect debug information about not serializable object
> at
> org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:390)
>
> at
> java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
>
> at
> org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:82)
>
> at
> org.apache.wicket.pageStore.AbstractPageStore.serializePage(AbstractPageStore.java:133)
>
> at
> org.apache.wicket.pageStore.DefaultPageStore.createSerializedPage(DefaultPageStore.java:281)
>
> at
> org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:61)
>
> at
> org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.storeTouchedPages(PageStoreManager.java:482)
>
> at
> org.apache.wicket.page.RequestAdapter.commitRequest(RequestAdapter.java:214)
>
>
> smallufo <sm...@gmail.com> 於 2021年4月30日 週五 下午12:52寫道:
>
> > I was using Kotlin 1.4.32 with wicket 8.11
> > but after upgrading to Kotlin 1.5.0 , it throws :
> >
> > Caused by: java.io.NotSerializableException: Non-serializable lambda
> > at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> > at
> >
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
>
> > at
> >
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
> > at java.base/java.lang.reflect.Method.invoke(Method.java:564)
> > at
> >
> java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1196)
>
> > at
> >
> java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1523)
>
> > at
> >
> java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1444)
>
> > at
> >
> java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1187)
>
> > at
> >
> java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1579)
>
> >
> >
> > what may go wrong here ?
> >
> > The wicket mode is DEPLOYMENT
> >
> > <filter>
> > <filter-name>wicket</filter-name>
> >
> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
> > <init-param>
> > <param-name>applicationClassName</param-name>
> > <param-value>foo.bar.MyApplication</param-value>
> > </init-param>
> > <init-param>
> > <param-name>configuration</param-name>
> > <param-value>DEPLOYMENT</param-value>
> > </init-param>
> > </filter>
> > <filter-mapping>
> > <filter-name>wicket</filter-name>
> > <url-pattern>/app/*</url-pattern>
> > </filter-mapping>
> >
> >
> > @MacMiniM1  ~  java -version
> > openjdk version "15.0.2" 2021-01-19
> > OpenJDK Runtime Environment Zulu15.29+15-CA (build 15.0.2+7)
> > OpenJDK 64-Bit Server VM Zulu15.29+15-CA (build 15.0.2+7, mixed mode)
> >
> >
> >
> > Thanks
> >
> >
>
>

Re: Kotlin 1.5.0 : NotSerializableException: Non-serializable lambda

Posted by Bas Gooren <ba...@iswd.nl>.
Hi!

Probably related to this:

https://youtrack.jetbrains.com/issue/KT-46373

"Since 1.5, SAM-converted lambdas are generated using invokedynamic with
bootstrap method from java.lang.invoke.LambdaMetafactory.
Resulting proxy classes are not Serializable by default.”

So your lambda’s in WizardPage are no longer serializable by default due to
your upgrade to kotlin 1.5.0.

So I’d recommend downgrading your Kotlin for now.

(I’m not an active user of kotlin, so I found this information with 10
minutes of Googling)

Met vriendelijke groet,
Kind regards,

Bas Gooren

Op 30 april 2021 bij 07:06:45, smallufo (smallufo@gmail.com) schreef:

more detail log :

2021-04-30 12:43:44.076 [http-nio-8080-exec-2] WARN
o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children/[write:1]/data
2021-04-30 12:43:44.078 [http-nio-8080-exec-2] WARN
o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children/[write:2]
2021-04-30 12:43:44.079 [http-nio-8080-exec-2] WARN
o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children
2021-04-30 12:43:44.099 [http-nio-8080-exec-2] ERROR
o.a.w.s.j.JavaSerializer.serialize - Error serializing object class
destiny.WizardPage [object=[Page class = destiny.WizardPage, id = 1, render
count = 1]]
org.apache.wicket.WicketRuntimeException: A problem occurred while trying
to collect debug information about not serializable object
at
org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:390)

at
java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)

at
org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:82)

at
org.apache.wicket.pageStore.AbstractPageStore.serializePage(AbstractPageStore.java:133)

at
org.apache.wicket.pageStore.DefaultPageStore.createSerializedPage(DefaultPageStore.java:281)

at
org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:61)

at
org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.storeTouchedPages(PageStoreManager.java:482)

at
org.apache.wicket.page.RequestAdapter.commitRequest(RequestAdapter.java:214)


smallufo <sm...@gmail.com> 於 2021年4月30日 週五 下午12:52寫道:

> I was using Kotlin 1.4.32 with wicket 8.11
> but after upgrading to Kotlin 1.5.0 , it throws :
>
> Caused by: java.io.NotSerializableException: Non-serializable lambda
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> at
>
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)

> at
>
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

> at java.base/java.lang.reflect.Method.invoke(Method.java:564)
> at
>
java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1196)

> at
>
java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1523)

> at
>
java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1444)

> at
>
java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1187)

> at
>
java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1579)

>
>
> what may go wrong here ?
>
> The wicket mode is DEPLOYMENT
>
> <filter>
> <filter-name>wicket</filter-name>
> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
> <init-param>
> <param-name>applicationClassName</param-name>
> <param-value>foo.bar.MyApplication</param-value>
> </init-param>
> <init-param>
> <param-name>configuration</param-name>
> <param-value>DEPLOYMENT</param-value>
> </init-param>
> </filter>
> <filter-mapping>
> <filter-name>wicket</filter-name>
> <url-pattern>/app/*</url-pattern>
> </filter-mapping>
>
>
> @MacMiniM1  ~  java -version
> openjdk version "15.0.2" 2021-01-19
> OpenJDK Runtime Environment Zulu15.29+15-CA (build 15.0.2+7)
> OpenJDK 64-Bit Server VM Zulu15.29+15-CA (build 15.0.2+7, mixed mode)
>
>
>
> Thanks
>
>

Re: Kotlin 1.5.0 : NotSerializableException: Non-serializable lambda

Posted by smallufo <sm...@gmail.com>.
more detail log :

2021-04-30 12:43:44.076 [http-nio-8080-exec-2] WARN
 o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children/[write:1]/data
2021-04-30 12:43:44.078 [http-nio-8080-exec-2] WARN
 o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children/[write:2]
2021-04-30 12:43:44.079 [http-nio-8080-exec-2] WARN
 o.a.w.c.u.o.c.CheckingObjectOutputStream.internalCheck - error delegating
to writeObject : Non-serializable lambda, path: /children
2021-04-30 12:43:44.099 [http-nio-8080-exec-2] ERROR
o.a.w.s.j.JavaSerializer.serialize - Error serializing object class
destiny.WizardPage [object=[Page class = destiny.WizardPage, id = 1, render
count = 1]]
org.apache.wicket.WicketRuntimeException: A problem occurred while trying
to collect debug information about not serializable object
at
org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:390)
at
java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
at
org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:82)
at
org.apache.wicket.pageStore.AbstractPageStore.serializePage(AbstractPageStore.java:133)
at
org.apache.wicket.pageStore.DefaultPageStore.createSerializedPage(DefaultPageStore.java:281)
at
org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:61)
at
org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.storeTouchedPages(PageStoreManager.java:482)
at
org.apache.wicket.page.RequestAdapter.commitRequest(RequestAdapter.java:214)

smallufo <sm...@gmail.com> 於 2021年4月30日 週五 下午12:52寫道:

> I was using Kotlin 1.4.32 with wicket 8.11
> but after upgrading to Kotlin 1.5.0 , it throws :
>
> Caused by: java.io.NotSerializableException: Non-serializable lambda
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:564)
> at
> java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1196)
> at
> java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1523)
> at
> java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1444)
> at
> java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1187)
> at
> java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1579)
>
>
> what may go wrong here ?
>
> The wicket mode is DEPLOYMENT
>
> <filter>
>   <filter-name>wicket</filter-name>
>   <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
>   <init-param>
>     <param-name>applicationClassName</param-name>
>     <param-value>foo.bar.MyApplication</param-value>
>   </init-param>
>   <init-param>
>     <param-name>configuration</param-name>
>     <param-value>DEPLOYMENT</param-value>
>   </init-param>
> </filter>
> <filter-mapping>
>   <filter-name>wicket</filter-name>
>   <url-pattern>/app/*</url-pattern>
> </filter-mapping>
>
>
> @MacMiniM1  ~  java -version
> openjdk version "15.0.2" 2021-01-19
> OpenJDK Runtime Environment Zulu15.29+15-CA (build 15.0.2+7)
> OpenJDK 64-Bit Server VM Zulu15.29+15-CA (build 15.0.2+7, mixed mode)
>
>
>
> Thanks
>
>