I manually create the Spring context, which is ClassPathXmlApplicationContext, 
and pass it to Wicket application by calling 

    getComponentInstantiationListeners().add(new SpringComponentInjector(this, 
MyApp.get().getApplicationContext())).

Then, In my panel I have this

    private class ReportMenuPanel extends WPanel {
        private static final long serialVersionUID = -9012565863392514416L;

        @Inject
        private IReportService reportService;

        ...
    }

I also checked my code with @SpringBean and I got the same exception.
 

    On Thursday, June 21, 2018, 3:30:29 PM GMT+4:30, Andrea Del Bene 
<an.delb...@gmail.com> wrote:  
 
 I think you are keeping a reference to your Spring bean in a page or in a
component, that's why Wicket is trying to serialize it. Are you injecting
this bean with @SpringBean annotation?

On Thu, Jun 21, 2018 at 12:45 PM, m.xinu <mehdi_x...@yahoo.com.invalid>
wrote:

> Thanks for your reply.
>
> Both of your proposed solutions mean using other interfaces in the Lambda
> expressions. However most of my Lambda definitions are in my Service tier
> classes (Spring beans), and the Service tier must be independent from the
> Web tier, and the force of Wicket serialization (even for the service
> beans) breaks the aforementioned rule. Is there another solution? Is it
> possible for Wicket not to serialize the Spring beans? or is there another
> serialization mechanism in Wicket not based on Serializable interface?
>
>
>    On Thursday, June 21, 2018, 5:44:00 AM GMT+4:30, Maxim Solodovnik <
> solomax...@gmail.com> wrote:
>
>  Wicket7:
> https://github.com/wicketstuff/core/blob/wicket-
> 7.x/lambda-parent/lambda/src/main/java/org/wicketstuff/
> lambda/SerializableBiConsumer.java
>
> WBR, Maxim
> (from mobile, sorry for the typos)
>
> On Thu, Jun 21, 2018, 08:13 Maxim Solodovnik <solomax...@gmail.com> wrote:
>
> >
> > https://cwiki.apache.org/confluence/display/WICKET/
> Migration+to+Wicket+8.0#MigrationtoWicket8.0-
> Provideserializableversionsofjava.util.function.(Supplier|
> Consumer|Function|BiConsumer)ASFJIRA5aa69414-a9e9-3523-
> 82ec-879b028fb15bWICKET-5991
> > <https://cwiki.apache.org/confluence/display/WICKET/
> Migration+to+Wicket+8.0#MigrationtoWicket8.0-
> Provideserializableversionsofjava.util.function.(Supplier%
> 7CConsumer%7CFunction%7CBiConsumer)ASFJIRA5aa69414-a9e9-3523-82ec-
> 879b028fb15bWICKET-5991>
> >
> > WBR, Maxim
> > (from mobile, sorry for the typos)
> >
> > On Wed, Jun 20, 2018, 22:42 m.xinu <mehdi_x...@yahoo.com.invalid> wrote:
> >
> >> Hi,
> >>
> >> I'm using Apache Wicket 7.9.0 alongside Spring 5.0.5.RELEASE. In one of
> >> my beans, I call some stream API containing multiple lambda expressions.
> >> During that page execution, I get following exception:
> >>
> >> Caused by: java.io.NotSerializableException:
> >> org.devocative.metis.service.data.ReportService$$Lambda$126/997816965
> >>
> >> and it is very strange for me since it is in one of my beans not in any
> >> Wicket-related part.
> >>
> >> I've searched and I've found the Serializable casting solution, however
> >> it results in a very complex syntax for my code. So is there any other
> >> solution? Dose Wicket has a way for this type of serialization?
> >>
> >>
> >> P.S: My block of code for stream:
> >>
> >> reports.parallelStream()
> >>    .filter(report ->
> >>      externalAuthorizationService == null ||
> >>          externalAuthorizationService.authorizeReport(report, null,
> >> currentUser.getUserId())
> >>    )
> >>    .flatMap(report -> report.getGroups().stream().map(dataGroup -> new
> >> KeyValueVO<>(dataGroup, report)))
> >>    .collect(Collectors.groupingBy(
> >>      KeyValueVO::getKey,
> >>      () -> new TreeMap<>(Comparator.comparing(DataGroup::getName)),
> >>      Collectors.mapping(
> >>          KeyValueVO::getValue,
> >>          Collectors.toList()))
> >>    );
> >>
> >>
>
>
  

Reply via email to