yes, thank you, that's the reason! The problem is the Comparator in TreeMap. I prefer to use your second proposed solution, however my service returns Map<DataGroup, List<Report>> and I render the result in two nested ListView as follows:
final Map<DataGroup, List<Report>> listPerGroup = reportService.listPerGroup(); add(new ListView<DataGroup>("group", new ArrayList<>(listPerGroup.keySet())) { @Override protected void populateItem(ListItem<DataGroup> groupItem) { DataGroup group = groupItem.getModelObject(); ... groupItem.add(new ListView<Report>("report", listPerGroup.get(group)) { @Override protected void populateItem(ListItem<Report> item) { final Report report = item.getModelObject(); ... } }); } }); In this approach, is it possible to use LoadableDetachableModel or I must change my return type? I want to learn the Wicket way. On Thursday, June 21, 2018, 4:48:25 PM GMT+4:30, Sven Meier <s...@meiers.net> wrote: Hi, your service method is return a TreeMap holding a lambda comparator: Comparator.comparing(DataGroup::getName) Either you make that comparator serializable (you can but you don't *need* to use org.danekja as Wicket does it): https://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda ... or don't keep the result of your service method in the Wicket component tree, e.g. by using a LoadableDetachableModel. Have fun Sven Am 21.06.2018 um 13:26 schrieb m.xinu: > 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())) >>>> ); >>>> >>>> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org